Skip to content

Commit

Permalink
Implement testing WIP b00tc4mp#391
Browse files Browse the repository at this point in the history
  • Loading branch information
PereHDZ committed Mar 12, 2024
1 parent ffc3f9b commit 7de96c3
Show file tree
Hide file tree
Showing 7 changed files with 535 additions and 52 deletions.
25 changes: 25 additions & 0 deletions staff/pere-hernandez/isdigram/data/Collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,41 @@ Collection.prototype._loadDocuments = function () {
}

Collection.prototype._saveDocuments = function (documents) {
//validation

if (!(documents instanceof Array))
throw new TypeError ('documents is not an Array')

documents.forEach(function (document){
if(!(document instanceof Object))
throw new TypeError('some elements in documents are not a document')
})

//logic
var documentsJSON = JSON.stringify(documents)

localStorage[this.name] = documentsJSON
}

Collection.prototype._backup = function (){
localStorage[this.name + '_backup'] = localStorage[this.name]
}

Collection.prototype._restore = function (){
localStorage[this.name] = localStorage[this.name + '_backup']
}



// CRUD

Collection.prototype.findOne = function (callback) {
//validation

if (!(callback instanceof Function))
throw new TypeError ('callback is not a Function')

//logic
var documents = this._loadDocuments()

var document = documents.find(callback)
Expand Down
17 changes: 17 additions & 0 deletions staff/pere-hernandez/isdigram/data/Collection.spec.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Collection spec</title>
</head>

<body>
<h1>Collection spec</h1>

<script src="../vendor/matcha.js"></script>

<script src="Collection.js"></script>
<script src="Collection.spec.js"></script>
</body>
</html>
283 changes: 283 additions & 0 deletions staff/pere-hernandez/isdigram/data/Collection.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
describe('Collection', function(){
describe('constructor', function(){
it('creates a collection', function(){
var cars = new Collection('cars')

expect(cars).toBeInstanceOf(Collection)
})
})




describe('> helpers', function(){
describe('_generateId', function(){
it('generates an id', function(){
var cars = new Collection('cars')

var id1 = cars._generateId()

expect(typeof id1).toBe('string')

var id2 = cars._generateId()

expect(typeof id2).toBe('string')

expect(id1 === id2).toBe(false)
})
})



describe('_loadDocuments', function(){
it('loads empty array on a new collection', function(){
delete (localStorage.cars)

var cars = new Collection('cars')

var documents = cars._loadDocuments()

expect(documents).toBeInstanceOf(Array)
expect(documents.length).toBe(0)
})

it('loads data on non-empty collection', function(){
delete (localStorage.cars)

localStorage.cars = '[{"brand": "Renault", "model": "Megane"}, {"brand": "Peugeot", "model": "208"}]'

var cars = new Collection('cars')

var documents = cars._loadDocuments()

expect(documents).toBeInstanceOf(Array)
expect(documents.length).toBe(2)

expect(documents[0]).toBeInstanceOf(Object)
expect(documents[0].brand).toBe('Renault')
expect(documents[0].model).toBe('Megane')

expect(documents[1]).toBeInstanceOf(Object)
expect(documents[1].brand).toBe('Peugeot')
expect(documents[1].model).toBe('208')

delete (localStorage.cars)
})
})



describe('_saveDocuments', function(){
it('should save a collection', function(){
delete (localStorage.cars)

var documents = [{"brand": "Renault", "model": "Megane"}, {"brand": "Peugeot", "model": "208"}]

var cars = new Collection ('cars')

cars._saveDocuments(documents)

expect(!!localStorage.cars).toBe(true)
expect(typeof localStorage.cars).toBe('string')

var documentsString = '[{"brand":"Renault","model":"Megane"},{"brand":"Peugeot","model":"208"}]'

expect(localStorage.cars).toBe(documentsString)

delete (localStorage.cars)
})

it('should fail on non-Array documents', function(){
delete (localStorage.cars)

var documents = 'I am not an Array'

var cars = new Collection('cars')

var errorThrown

try {
cars._saveDocuments(documents)
} catch (error) {
errorThrown = error
}

expect(!!localStorage.cars).toBe(false)

expect(errorThrown).toBeInstanceOf(TypeError)
expect(errorThrown.message).toBe('documents is not an Array')

delete (localStorage.cars)
})

it('should fail on documents being an Array of non-documents', function (){
delete (localStorage.cars)

var documents = ['I am not an Object', 123]

var cars = new Collection('cars')

var errorThrown

try {
cars._saveDocuments(documents)
} catch (error) {
errorThrown = error
}

expect(!!localStorage.cars).toBe(false)

expect(errorThrown).toBeInstanceOf(TypeError)
expect(errorThrown.message).toBe('some elements in documents are not a document')

delete (localStorage.cars)
})
})



describe('_backup', function(){
it('should create a backup copy', function(){
delete (localStorage.cars)
delete (localStorage.cars_backup)

localStorage.cars = '[{"brand":"Renault","model":"Megane"},{"brand":"Peugeot","model":"208"}]'

var cars = new Collection('cars')

cars._backup()

expect(!!localStorage.cars_backup).toBe(true)

expect(localStorage.cars_backup).toBe(localStorage.cars)

delete (localStorage.cars)
delete (localStorage.cars_backup)
})
})



describe('_restore', function(){
it('should restore a collection', function(){
delete (localStorage.cars)
delete (localStorage.cars_backup)

localStorage.cars_backup = '[{"brand":"Renault","model":"Megane"},{"brand":"Peugeot","model":"208"}]'

var cars = new Collection('cars')

cars._restore()

expect(!!localStorage.cars).toBe(true)

expect(localStorage.cars).toBe(localStorage.cars_backup)

delete (localStorage.cars)
delete (localStorage.cars_backup)
})
})
})




describe('> CRUD', function(){
describe('findOne', function(){
it('should find an existing document', function(){
delete (localStorage.cars)
delete (localStorage.cars_backup)

localStorage.cars = '[{"brand":"Renault","model":"Megane"},{"brand":"Peugeot","model":"208"}]'

var cars = new Collection('cars')

var car = cars.findOne(function (car){
return car.brand === 'Renault'
})

expect(!!car).toBe(true)
expect(car).toBeInstanceOf(Object)
expect(car.brand).toBe('Renault')
expect(car.model).toBe('Megane')

delete (localStorage.cars)
delete (localStorage.cars_backup)
})

it('should return undefined on no matches', function(){
delete (localStorage.cars)
delete (localStorage.cars_backup)

localStorage.cars = '[{"brand":"Renault","model":"Megane"},{"brand":"Peugeot","model":"208"}]'

var cars = new Collection('cars')

var car = cars.findOne(function (car){
return car.brand === 'Fiat'
})

expect(!!car).toBe(false)
expect(car).toBe(undefined)

delete (localStorage.cars)
delete (localStorage.cars_backup)
})

it('should fail on callback not a function', function(){
delete (localStorage.cars)

localStorage.cars = '[{"brand":"Renault","model":"Megane"},{"brand":"Peugeot","model":"208"}]'

var cars = new Collection('cars')

var errorThrown

try {
var car = cars.findOne('I am not a Function')
} catch (error) {
errorThrown = error
}

expect(!!car).toBe(false)

expect(errorThrown).toBeInstanceOf(TypeError)
expect(errorThrown.message).toBe('callback is not a Function')

delete (localStorage.cars)
})
})



describe('insertOne', function(){
it('should insert a document in a collection', function(){
delete (localStorage.cars)

localStorage.cars = '[{"brand":"Renault","model":"Megane"},{"brand":"Peugeot","model":"208"}]'

var cars = new Collection('cars')

var car = {brand: 'Toyota', model: 'Yaris'}

cars.insertOne(car)

parsedCars = JSON.parse(localStorage.cars)

expect(!!localStorage.cars).toBe(true)
expect(parsedCars.length).toBe(3)

expect(parsedCars[0].brand).toBe('Renault')
expect(parsedCars[0].model).toBe('Megane')

expect(parsedCars[1].brand).toBe('Peugeot')
expect(parsedCars[1].model).toBe('208')

expect(parsedCars[2].brand).toBe('Toyota')
expect(parsedCars[2].model).toBe('Yaris')

delete (localStorage.cars)
})
})
})
})
28 changes: 28 additions & 0 deletions staff/pere-hernandez/isdigram/home/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -233,4 +233,32 @@ li {
width: 100%;
justify-content: space-between;
padding: 0 2vw 0 2vw;
}

.edit-post-form {
display: none;
flex-direction: row;
margin: 2vh 2vw 0 2vw;
}

.edit-post-input {
width: 100%;
margin: 0 4vw 0 0;
font-size: 4vw;
}

.edit-post-button {
width: 16vw;
height: 4vh;
background-color: #6CA4E6;
color: white;
border: 0;
margin-right: 1vw;
border-radius: 5px;
}

.return-from-edit-post-button {
border: 0;
border-radius: 5px;
background-color: #D9D9D9;
}
Loading

0 comments on commit 7de96c3

Please sign in to comment.