Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const ListItemService = {
- //CRUD METHODS
- //GET
- getAllItems(knex) {
- return knex.select('*').from('shopping_list')
- },
- //INSERT
- insertItem(knex, newItem) {
- return knex
- .insert(newItem)
- .into('shopping_list')
- .returning('*')
- .then(rows => {
- return rows[0]
- })
- },
- //GET
- getById(knex, id) {
- return knex.from('shopping_list').select('*').where('id', id).first()
- },
- //DELETE
- deleteItem(knex, id) {
- return knex('shopping_list')
- .where({ id })
- .delete()
- },
- //UPDATE
- updateItem(knex, id, newItemFields) {
- return knex('shopping_list')
- .where({ id })
- .update(newItemFields)
- },
- }
- module.exports = ListItemService
- /***** TESTS with LISTITEM SERVICE*****/
- const ListItemService = require('../src/shopping-list-service')
- const knex = require('knex')
- describe(`Shopping List service object`, function() {
- // it(`should run the tests`, () => {
- // expect(true).to.eql(false)
- // })psql \l
- let db
- let testItems = [
- {
- id: 75,
- name: 'nuggets',
- price: '6.14',
- date_added: new Date('2100-05-22T16:28:32.615Z'),
- checked: false,
- category: 'Snack'
- },
- {
- id: 76,
- name: 'beans',
- price: '4.14',
- date_added: new Date('2100-05-22T16:28:32.615Z'),
- checked: false,
- category: 'Snack'
- },
- {
- id: 77,
- name: 'squash',
- price: '2.14',
- date_added: new Date('2100-05-22T16:28:32.615Z'),
- checked: false,
- category: 'Lunch'
- },
- ]
- before(() => {
- db = knex({
- client: 'pg',
- connection: process.env.TEST_DB_URL,
- })
- })
- before(() => db('shopping_list').truncate())
- afterEach(() => db('shopping_list').truncate())
- after(() => db.destroy())
- context(`Given 'shopping_list' has data`, () => {
- beforeEach(() => {
- return db
- .into('shopping_list')
- .insert(testItems)
- })
- it(`getAllItems() resolves all items from 'shopping_list' table`, () => {
- // test that ListItemervice.getAllItems gets data from table
- return ListItemService.getAllItems(db).then(actual => {
- expect(actual).to.eql(testItems)
- })
- })
- it(`getById() resolves an item by id from 'shopping_list' table`, () => {
- const idToGet = 77
- const thirdTestItem = testItems[2]
- return ListItemService.getById(db, idToGet)
- .then(actual => {
- expect(actual).to.eql({
- id: idToGet,
- name: thirdTestItem.name,
- category: thirdTestItem.category,
- date_added: thirdTestItem.date_added,
- price: thirdTestItem.price,
- checked: false
- })
- })
- })
- it(`deleteItem() removes an article by id from 'shopping_list' table`, () => {
- const itemId = 75
- return ListItemService.deleteItem(db, itemId)
- .then(() => ListItemService.getAllItems(db))
- .then(allItems => {
- // copy the test articles array without the "deleted" article
- const expected = testItems.filter(item => item.id !== itemId)
- expect(allItems).to.eql(expected)
- })
- })
- it(`updateItem() updates an item from the 'shopping_list' table`, () => {
- const idOfItemToUpdate = 76
- const newItemData = {
- name: 'updated title',
- price: '3.12',
- date_added: new Date(),
- checked: true,
- category: 'Breakfast'
- }
- return ListItemService.updateItem(db, idOfItemToUpdate, newItemData)
- .then(() => ListItemService.getById(db, idOfItemToUpdate))
- .then(item => {
- expect(item).to.eql({
- id: idOfItemToUpdate,
- ...newItemData,
- })
- })
- })
- })
- context(`Given 'shopping_list' has no data`, () => {
- it(`getAllItems() resolves an empty array`, () => {
- return ListItemService.getAllItems(db)
- .then(actual => {
- expect(actual).to.eql([])
- })
- })
- })
- it(`insertItem() inserts an item and resolves the item with an 'id'`, () => {
- const newItem = {
- name: 'New Test Name',
- price: '5.57',
- date_added: new Date(),
- checked: true,
- category: 'Lunch'
- }
- return ListItemService.insertItem(db, newItem)
- .then(actual => {
- expect(actual).to.eql({
- id: 1,
- name: newItem.name,
- price: newItem.price,
- date_added: newItem.date_added,
- checked: newItem.checked,
- category: newItem.category
- })
- })
- })
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement