adds tables store tests

This commit is contained in:
Keviin Åberg Kultalahti 2021-03-30 15:37:53 +02:00
parent 7bb01a152c
commit 53bff4a4d9
3 changed files with 802 additions and 5 deletions

View File

@ -5,11 +5,7 @@ import api from "builderStore/api"
export function createTablesStore() { export function createTablesStore() {
const store = writable({ const store = writable({})
list: [],
selected: {},
draft: {},
})
const { subscribe, update, set } = store const { subscribe, update, set } = store
async function fetch() { async function fetch() {

View File

@ -0,0 +1,726 @@
export const SOME_TABLES = [
{
"type": "table",
"views": {},
"name": "Guest",
"schema": {
"Auto ID": {
"name": "Auto ID",
"type": "number",
"subtype": "autoID",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "number",
"presence": false,
"numericality": {
"greaterThanOrEqualTo": "",
"lessThanOrEqualTo": ""
}
},
"lastID": 1
},
"Created By": {
"name": "Created By",
"type": "link",
"subtype": "createdBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Guest-Created By",
"relationshipType": "many-to-many"
},
"Created At": {
"name": "Created At",
"type": "datetime",
"subtype": "createdAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Updated By": {
"name": "Updated By",
"type": "link",
"subtype": "updatedBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Guest-Updated By",
"relationshipType": "many-to-many"
},
"Updated At": {
"name": "Updated At",
"type": "datetime",
"subtype": "updatedAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Name": {
"type": "string",
"constraints": {
"type": "string",
"length": {
"maximum": ""
},
"presence": false
},
"fieldName": "Guest",
"name": "Name"
},
"Episode": {
"name": "Episode",
"type": "link",
"tableId": "ta_d4bf541ce0d84b16a1a8e0a060e5f7f7",
"fieldName": "Guest",
"relationshipType": "one-to-many"
}
},
"primaryDisplay": "Name",
"indexes": [],
"_id": "ta_3c78cffe33664ca9bfb6b2b6cb3ee55a",
"_rev": "10-27f034bf50ec3e2f180d8f96db1f0f31"
},
{
"type": "table",
"views": {},
"name": "Sponsors",
"schema": {
"Auto ID": {
"name": "Auto ID",
"type": "number",
"subtype": "autoID",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "number",
"presence": false,
"numericality": {
"greaterThanOrEqualTo": "",
"lessThanOrEqualTo": ""
}
},
"lastID": 1
},
"Created By": {
"name": "Created By",
"type": "link",
"subtype": "createdBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Sponsors-Created By",
"relationshipType": "many-to-many"
},
"Created At": {
"name": "Created At",
"type": "datetime",
"subtype": "createdAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Updated By": {
"name": "Updated By",
"type": "link",
"subtype": "updatedBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Sponsors-Updated By",
"relationshipType": "many-to-many"
},
"Updated At": {
"name": "Updated At",
"type": "datetime",
"subtype": "updatedAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Name": {
"type": "string",
"constraints": {
"type": "string",
"length": {
"maximum": ""
},
"presence": false
},
"fieldName": "Sponsors",
"name": "Name"
},
"Spot": {
"type": "longform",
"constraints": {
"type": "string",
"length": {},
"presence": false
},
"fieldName": "Sponsors",
"name": "Spot"
},
"Episode": {
"name": "Episode",
"type": "link",
"tableId": "ta_d4bf541ce0d84b16a1a8e0a060e5f7f7",
"fieldName": "Sponsors",
"relationshipType": "many-to-many"
}
},
"primaryDisplay": "Name",
"indexes": [],
"_id": "ta_7fd0fa15edd54e0f91a47f50b7577281",
"_rev": "7-de89b81e21ae4b3f65a6b655144fe097"
},
{
"type": "table",
"views": {},
"name": "Episode",
"schema": {
"Auto ID": {
"name": "Auto ID",
"type": "number",
"subtype": "autoID",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "number",
"presence": false,
"numericality": {
"greaterThanOrEqualTo": "",
"lessThanOrEqualTo": ""
}
},
"lastID": 1
},
"Created By": {
"name": "Created By",
"type": "link",
"subtype": "createdBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Episode-Created By",
"relationshipType": "many-to-many"
},
"Created At": {
"name": "Created At",
"type": "datetime",
"subtype": "createdAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Updated By": {
"name": "Updated By",
"type": "link",
"subtype": "updatedBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Episode-Updated By",
"relationshipType": "many-to-many"
},
"Updated At": {
"name": "Updated At",
"type": "datetime",
"subtype": "updatedAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Summary": {
"type": "longform",
"constraints": {
"type": "string",
"length": {},
"presence": false
},
"fieldName": "Episode",
"name": "Summary"
},
"Author": {
"type": "string",
"constraints": {
"type": "string",
"length": {
"maximum": ""
},
"presence": false
},
"fieldName": "Episode",
"name": "Author"
},
"Published": {
"type": "boolean",
"constraints": {
"type": "boolean",
"presence": false
},
"fieldName": "Episode",
"name": "Published"
},
"Guest": {
"type": "link",
"constraints": {
"type": "array",
"presence": false
},
"fieldName": "Episode",
"name": "Guest",
"relationshipType": "many-to-one",
"tableId": "ta_3c78cffe33664ca9bfb6b2b6cb3ee55a"
},
"Title": {
"type": "string",
"constraints": {
"type": "string",
"length": {
"maximum": ""
},
"presence": false
},
"fieldName": "Episode",
"name": "Title"
},
"Show Notes": {
"type": "longform",
"constraints": {
"type": "string",
"length": {},
"presence": false
},
"fieldName": "Episode",
"name": "Show Notes"
},
"Sponsors": {
"type": "link",
"constraints": {
"type": "array",
"presence": false
},
"fieldName": "Episode",
"name": "Sponsors",
"relationshipType": "many-to-many",
"tableId": "ta_7fd0fa15edd54e0f91a47f50b7577281"
},
"Number": {
"type": "number",
"constraints": {
"type": "number",
"presence": false,
"numericality": {
"greaterThanOrEqualTo": "",
"lessThanOrEqualTo": ""
}
},
"fieldName": "Episode",
"name": "Number"
},
"Audio": {
"type": "attachment",
"constraints": {
"type": "array",
"presence": false
},
"fieldName": "Episode",
"name": "Audio"
}
},
"indexes": [],
"primaryDisplay": "Author",
"_id": "ta_d4bf541ce0d84b16a1a8e0a060e5f7f7",
"_rev": "13-9d70dee825154a9df5c22e1d39bf269c"
},
{
"type": "table",
"views": {},
"name": "Users",
"schema": {
"email": {
"type": "string",
"constraints": {
"type": "string",
"email": true,
"length": {
"maximum": ""
},
"presence": true
},
"fieldName": "email",
"name": "email"
},
"roleId": {
"fieldName": "roleId",
"name": "roleId",
"type": "options",
"constraints": {
"type": "string",
"presence": false,
"inclusion": [
"ADMIN",
"POWER",
"BASIC",
"PUBLIC",
"BUILDER"
]
}
},
"status": {
"fieldName": "status",
"name": "status",
"type": "options",
"constraints": {
"type": "string",
"presence": false,
"inclusion": [
"active",
"inactive"
]
}
},
"Episode-Created By": {
"name": "Episode-Created By",
"type": "link",
"tableId": "ta_d4bf541ce0d84b16a1a8e0a060e5f7f7",
"fieldName": "Created By",
"relationshipType": "many-to-many",
"autocolumn": true
},
"Episode-Updated By": {
"name": "Episode-Updated By",
"type": "link",
"tableId": "ta_d4bf541ce0d84b16a1a8e0a060e5f7f7",
"fieldName": "Updated By",
"relationshipType": "many-to-many",
"autocolumn": true
},
"Guest-Created By": {
"name": "Guest-Created By",
"type": "link",
"tableId": "ta_3c78cffe33664ca9bfb6b2b6cb3ee55a",
"fieldName": "Created By",
"relationshipType": "many-to-many",
"autocolumn": true
},
"Guest-Updated By": {
"name": "Guest-Updated By",
"type": "link",
"tableId": "ta_3c78cffe33664ca9bfb6b2b6cb3ee55a",
"fieldName": "Updated By",
"relationshipType": "many-to-many",
"autocolumn": true
},
"Sponsors-Created By": {
"name": "Sponsors-Created By",
"type": "link",
"tableId": "ta_7fd0fa15edd54e0f91a47f50b7577281",
"fieldName": "Created By",
"relationshipType": "many-to-many",
"autocolumn": true
},
"Sponsors-Updated By": {
"name": "Sponsors-Updated By",
"type": "link",
"tableId": "ta_7fd0fa15edd54e0f91a47f50b7577281",
"fieldName": "Updated By",
"relationshipType": "many-to-many",
"autocolumn": true
}
},
"primaryDisplay": "email",
"_id": "ta_users",
"_rev": "67-1833e6a0028c100633e31788fe958a62"
}
]
export const SAVE_TABLES_RESPONSE = {
"type": "table",
"_id": "ta_3c78cffe33664ca9bfb6b2b6cb3ee55a",
"views": {},
"name": "Guest",
"schema": {
"Auto ID": {
"name": "Auto ID",
"type": "number",
"subtype": "autoID",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "number",
"presence": false,
"numericality": {
"greaterThanOrEqualTo": "",
"lessThanOrEqualTo": ""
}
},
"lastID": 1
},
"Created By": {
"name": "Created By",
"type": "link",
"subtype": "createdBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Guest-Created By",
"relationshipType": "many-to-many"
},
"Created At": {
"name": "Created At",
"type": "datetime",
"subtype": "createdAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Updated By": {
"name": "Updated By",
"type": "link",
"subtype": "updatedBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Guest-Updated By",
"relationshipType": "many-to-many"
},
"Updated At": {
"name": "Updated At",
"type": "datetime",
"subtype": "updatedAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Episode": {
"name": "Episode",
"type": "link",
"tableId": "ta_d4bf541ce0d84b16a1a8e0a060e5f7f7",
"fieldName": "Guest",
"relationshipType": "one-to-many"
},
"Names": {
"type": "string",
"constraints": {
"type": "string",
"length": {
"maximum": ""
},
"presence": false
},
"fieldName": "Guest",
"name": "Names"
}
},
"primaryDisplay": "Names",
"indexes": [],
"_rev": "11-7c153edbc6d7c43821cfd5ed526266cf"
}
export const A_TABLE = {
"type": "table",
"views": {},
"name": "Guest",
"schema": {
"Auto ID": {
"name": "Auto ID",
"type": "number",
"subtype": "autoID",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "number",
"presence": false,
"numericality": {
"greaterThanOrEqualTo": "",
"lessThanOrEqualTo": ""
}
},
"lastID": 1
},
"Created By": {
"name": "Created By",
"type": "link",
"subtype": "createdBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Guest-Created By",
"relationshipType": "many-to-many"
},
"Created At": {
"name": "Created At",
"type": "datetime",
"subtype": "createdAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Updated By": {
"name": "Updated By",
"type": "link",
"subtype": "updatedBy",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "array",
"presence": false
},
"tableId": "ta_users",
"fieldName": "Guest-Updated By",
"relationshipType": "many-to-many"
},
"Updated At": {
"name": "Updated At",
"type": "datetime",
"subtype": "updatedAt",
"icon": "ri-magic-line",
"autocolumn": true,
"constraints": {
"type": "string",
"length": {},
"presence": false,
"datetime": {
"latest": "",
"earliest": ""
}
}
},
"Episode": {
"name": "Episode",
"type": "link",
"tableId": "ta_d4bf541ce0d84b16a1a8e0a060e5f7f7",
"fieldName": "Guest",
"relationshipType": "one-to-many"
},
"Names": {
"type": "string",
"constraints": {
"type": "string",
"length": {
"maximum": ""
},
"presence": false
},
"fieldName": "Guest",
"name": "Names"
}
},
"primaryDisplay": "Names",
"indexes": [],
"_id": "ta_3c78cffe33664ca9bfb6b2b6cb3ee55a",
"_rev": "10-27f034bf50ec3e2f180d8f96db1f0f31",
"_rename": {
"old": "Name",
"updated": "Names"
}
}

View File

@ -0,0 +1,75 @@
import { get } from 'svelte/store'
import api from 'builderStore/api'
jest.mock('builderStore/api');
import { SOME_TABLES, SAVE_TABLES_RESPONSE, A_TABLE } from './fixtures/tables'
import { createTablesStore } from "../tables"
import { views } from '../views'
describe("Tables Store", () => {
let store = createTablesStore()
beforeEach(async () => {
api.get.mockReturnValue({ json: () => SOME_TABLES})
await store.init()
})
it("Initialises correctly", async () => {
expect(get(store)).toEqual({ list: SOME_TABLES, selected: {}, draft: {}})
})
it("fetches all the tables", async () => {
api.get.mockReturnValue({ json: () => SOME_TABLES})
await store.fetch()
expect(get(store)).toEqual({ list: SOME_TABLES, selected: {}, draft: {}})
})
it("selects a table", async () => {
const tableToSelect = SOME_TABLES[0]
await store.select(tableToSelect)
expect(get(store).selected).toEqual(tableToSelect)
expect(get(store).draft).toEqual(tableToSelect)
})
it("selecting without a param resets the selected property", async () => {
await store.select()
expect(get(store).draft).toEqual({})
})
it("selecting a table updates the view store", async () => {
const tableToSelect = SOME_TABLES[0]
await store.select(tableToSelect)
expect(get(store).selected).toEqual(tableToSelect)
expect(get(views).selected).toEqual({ name: `all_${tableToSelect._id}` })
})
it("saving a table also selects it", async () => {
api.post.mockReturnValue({ json: () => SAVE_TABLES_RESPONSE})
await store.save(A_TABLE)
expect(get(store).selected).toEqual(SAVE_TABLES_RESPONSE)
})
it("saving the table returns a response", async () => {
api.post.mockReturnValue({ json: () => SAVE_TABLES_RESPONSE})
const response = await store.save(A_TABLE)
expect(response).toEqual(SAVE_TABLES_RESPONSE)
})
it("deleting a table removes it from the store", async () => {
api.delete.mockReturnValue({status: 200, message: `Table deleted.`})
await store.delete(A_TABLE)
expect(get(store).list).toEqual(expect.not.arrayContaining([A_TABLE]))
})
// TODO: Write tests for saving and deleting fields
})