Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.95 KB | None | 0 0
  1. const ListItemService = {
  2. //CRUD METHODS
  3. //GET
  4. getAllItems(knex) {
  5. return knex.select('*').from('shopping_list')
  6. },
  7. //INSERT
  8. insertItem(knex, newItem) {
  9. return knex
  10. .insert(newItem)
  11. .into('shopping_list')
  12. .returning('*')
  13. .then(rows => {
  14. return rows[0]
  15. })
  16. },
  17. //GET
  18. getById(knex, id) {
  19. return knex.from('shopping_list').select('*').where('id', id).first()
  20. },
  21. //DELETE
  22. deleteItem(knex, id) {
  23. return knex('shopping_list')
  24. .where({ id })
  25. .delete()
  26. },
  27. //UPDATE
  28. updateItem(knex, id, newItemFields) {
  29. return knex('shopping_list')
  30. .where({ id })
  31. .update(newItemFields)
  32. },
  33. }
  34.  
  35. module.exports = ListItemService
  36.  
  37.  
  38. /***** TESTS with LISTITEM SERVICE*****/
  39.  
  40. const ListItemService = require('../src/shopping-list-service')
  41. const knex = require('knex')
  42.  
  43. describe(`Shopping List service object`, function() {
  44. // it(`should run the tests`, () => {
  45. // expect(true).to.eql(false)
  46. // })psql \l
  47. let db
  48. let testItems = [
  49. {
  50. id: 75,
  51. name: 'nuggets',
  52. price: '6.14',
  53. date_added: new Date('2100-05-22T16:28:32.615Z'),
  54. checked: false,
  55. category: 'Snack'
  56. },
  57. {
  58. id: 76,
  59. name: 'beans',
  60. price: '4.14',
  61. date_added: new Date('2100-05-22T16:28:32.615Z'),
  62. checked: false,
  63. category: 'Snack'
  64. },
  65. {
  66. id: 77,
  67. name: 'squash',
  68. price: '2.14',
  69. date_added: new Date('2100-05-22T16:28:32.615Z'),
  70. checked: false,
  71. category: 'Lunch'
  72. },
  73. ]
  74.  
  75. before(() => {
  76. db = knex({
  77. client: 'pg',
  78. connection: process.env.TEST_DB_URL,
  79. })
  80. })
  81.  
  82. before(() => db('shopping_list').truncate())
  83.  
  84. afterEach(() => db('shopping_list').truncate())
  85.  
  86. after(() => db.destroy())
  87.  
  88. context(`Given 'shopping_list' has data`, () => {
  89. beforeEach(() => {
  90. return db
  91. .into('shopping_list')
  92. .insert(testItems)
  93. })
  94.  
  95. it(`getAllItems() resolves all items from 'shopping_list' table`, () => {
  96. // test that ListItemervice.getAllItems gets data from table
  97. return ListItemService.getAllItems(db).then(actual => {
  98. expect(actual).to.eql(testItems)
  99. })
  100. })
  101.  
  102. it(`getById() resolves an item by id from 'shopping_list' table`, () => {
  103. const idToGet = 77
  104. const thirdTestItem = testItems[2]
  105. return ListItemService.getById(db, idToGet)
  106. .then(actual => {
  107. expect(actual).to.eql({
  108. id: idToGet,
  109. name: thirdTestItem.name,
  110. category: thirdTestItem.category,
  111. date_added: thirdTestItem.date_added,
  112. price: thirdTestItem.price,
  113. checked: false
  114. })
  115. })
  116. })
  117.  
  118. it(`deleteItem() removes an article by id from 'shopping_list' table`, () => {
  119. const itemId = 75
  120. return ListItemService.deleteItem(db, itemId)
  121. .then(() => ListItemService.getAllItems(db))
  122. .then(allItems => {
  123. // copy the test articles array without the "deleted" article
  124. const expected = testItems.filter(item => item.id !== itemId)
  125. expect(allItems).to.eql(expected)
  126. })
  127. })
  128.  
  129. it(`updateItem() updates an item from the 'shopping_list' table`, () => {
  130. const idOfItemToUpdate = 76
  131. const newItemData = {
  132. name: 'updated title',
  133. price: '3.12',
  134. date_added: new Date(),
  135. checked: true,
  136. category: 'Breakfast'
  137. }
  138. return ListItemService.updateItem(db, idOfItemToUpdate, newItemData)
  139. .then(() => ListItemService.getById(db, idOfItemToUpdate))
  140. .then(item => {
  141. expect(item).to.eql({
  142. id: idOfItemToUpdate,
  143. ...newItemData,
  144. })
  145. })
  146. })
  147. })
  148.  
  149. context(`Given 'shopping_list' has no data`, () => {
  150. it(`getAllItems() resolves an empty array`, () => {
  151. return ListItemService.getAllItems(db)
  152. .then(actual => {
  153. expect(actual).to.eql([])
  154. })
  155. })
  156. })
  157.  
  158.  
  159.  
  160. it(`insertItem() inserts an item and resolves the item with an 'id'`, () => {
  161. const newItem = {
  162. name: 'New Test Name',
  163. price: '5.57',
  164. date_added: new Date(),
  165. checked: true,
  166. category: 'Lunch'
  167. }
  168. return ListItemService.insertItem(db, newItem)
  169. .then(actual => {
  170. expect(actual).to.eql({
  171. id: 1,
  172. name: newItem.name,
  173. price: newItem.price,
  174. date_added: newItem.date_added,
  175. checked: newItem.checked,
  176. category: newItem.category
  177. })
  178. })
  179.  
  180. })
  181.  
  182. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement