feat: rows can be set later to a table

This commit is contained in:
ysandler 2020-05-19 20:59:29 -05:00 committed by root
parent d032f2e8ed
commit a195b75154
2 changed files with 82 additions and 47 deletions

View File

@ -1,13 +1,8 @@
class Table { class Table {
constructor (props) { constructor (props) {
const validatePropsResponse = this._validateConstructionProps(props) const validatePropsResponse = this._validateConstructionProps(props)
if (validatePropsResponse.status === 'ERR') { if (validatePropsResponse.status === 'ERR') throw validatePropsResponse
this.isValid = false else this._assignProps(props)
throw validatePropsResponse
}
else {
this._assignProps(props)
}
} }
getProperties = () => { getProperties = () => {
@ -22,14 +17,22 @@ class Table {
getRows = () => this.rows getRows = () => this.rows
setRows = rows => {
const rowsValidation = this._validateRows(rows)
if (rowsValidation.status === 'ERR') throw rowsValidation
if (!Array.isArray(rows)) this.rows = [rows]
else this.rows = rows
}
_assignProps = props => { _assignProps = props => {
this.id = props.id this.id = props.id
this.label = props.label this.label = props.label
this.type = 'Table' this.type = 'Table'
this.isValid = true this.isValid = true
if (!Array.isArray(props.rows)) this.rows = [props.rows] if (props.rows) this.setRows(props.rows)
else this.rows = props.rows else this.rows = []
} }
_validateConstructionProps = props => { _validateConstructionProps = props => {
@ -48,38 +51,33 @@ class Table {
if (!props.id) err.error.messages.push('No id on creation of Table') if (!props.id) err.error.messages.push('No id on creation of Table')
if (!props.label) err.error.messages.push('No label on creation of Table') if (!props.label) err.error.messages.push('No label on creation of Table')
const validateRowsErrors = this._validateRows(props.rows) if (err.error.messages.length === 0) return { status: 'OK' }
if (validateRowsErrors.length > 0) { else return err
validateRowsErrors.forEach(e => {
err.error.messages.push(e)
})
}
if (err.error.messages.length === 0){
return { status: 'OK' }
} else{
return err
}
} }
_validateRows = rowsToImport => { _validateRows = rowsToImport => {
const err = {
status: 'ERR',
error: {
label: 'Error Creating Table',
messages: []
}
}
let rows = [] let rows = []
if (!Array.isArray(rowsToImport)) rows = [rowsToImport] if (!Array.isArray(rowsToImport)) rows = [rowsToImport]
else rows = rowsToImport else rows = rowsToImport
const errorMesages = [] if (rows.length === 0) err.error.messages.push('No Tables imported')
if (rows.length === 0) {
errorMesages.push('No Tables imported')
}
for (let r = 0; r < rows.length; r++) { for (let r = 0; r < rows.length; r++) {
if (typeof rows[r] !== 'object') { if (typeof rows[r] !== 'object') {
errorMesages.push(`row[${r}] is not an object`) err.error.messages.push(`row[${r}] is not an object`)
} }
} }
return errorMesages if (err.error.messages.length > 0) return err
else return { status: 'OK' }
} }
} }

View File

@ -27,7 +27,8 @@ const getTableProperties = () => {
if (JSON.stringify(tableProperties) === JSON.stringify(expectedOutput)) return true if (JSON.stringify(tableProperties) === JSON.stringify(expectedOutput)) return true
else return false else return false
} catch (err) { } catch (err) {
return err console.log(err)
return false
} }
} }
@ -43,7 +44,8 @@ const getTableRows = () => {
if (JSON.stringify(tableRows) === JSON.stringify(expectedOutput)) return true if (JSON.stringify(tableRows) === JSON.stringify(expectedOutput)) return true
else return false else return false
} catch (err) { } catch (err) {
return err console.log(err)
return false
} }
} }
@ -72,8 +74,7 @@ const createTableWithOnlyId = () => {
error: { error: {
label: 'Error Creating Table', label: 'Error Creating Table',
messages: [ messages: [
'No label on creation of Table', 'No label on creation of Table'
'row[0] is not an object'
] ]
} }
} }
@ -94,8 +95,7 @@ const createTableWithOnlyLabel = () => {
error: { error: {
label: 'Error Creating Table', label: 'Error Creating Table',
messages: [ messages: [
'No id on creation of Table', 'No id on creation of Table'
'row[0] is not an object'
] ]
} }
} }
@ -112,21 +112,21 @@ const createTableWithOnlyLabel = () => {
const createTableWithEverythingButRows = () => { const createTableWithEverythingButRows = () => {
const input = { id: 'abc', label: 'Test Label' } const input = { id: 'abc', label: 'Test Label' }
const expectedOutput = { const expectedOutput = {
status: 'ERR', id: 'abc',
error: { label: 'Test Label',
label: 'Error Creating Table', rows: [],
messages: [ type: 'Table',
'row[0] is not an object' isValid: true
]
}
} }
try { try {
new Table(input) const table = new Table(input)
return false const tableProps = table.getProperties()
} catch (err) { if (JSON.stringify(expectedOutput) === JSON.stringify(tableProps)) return true
if (JSON.stringify(expectedOutput) === JSON.stringify(err)) return true
else return false else return false
} catch (err) {
console.log(err)
return false
} }
} }
@ -181,7 +181,43 @@ const createTableWithRowsAsNotArray = () => {
if (JSON.stringify(tableProperties) === JSON.stringify(expectedOutput)) return true if (JSON.stringify(tableProperties) === JSON.stringify(expectedOutput)) return true
else return false else return false
} catch (err) { } catch (err) {
return err console.log(err)
return false
}
}
const setTableRows = () => {
const initialInput = {
id: 'abc',
label: 'Test Label'
}
const rows = [
{ id: '2345676', type: 'row', lat: 54, long: 31 },
{ id: '2345676', type: 'lh', lat: 31, long: -71.34 }
]
const expectedOutput = {
id: 'abc',
label: 'Test Label',
rows: [
{ id: '2345676', type: 'row', lat: 54, long: 31 },
{ id: '2345676', type: 'lh', lat: 31, long: -71.34 }
],
type: 'Table',
isValid: true
}
try {
const table = new Table(initialInput)
table.setRows(rows)
const tableProperties = table.getProperties()
if (JSON.stringify(tableProperties) === JSON.stringify(expectedOutput)) return true
else return false
} catch (err) {
console.log(err)
return false
} }
} }
@ -193,5 +229,6 @@ export default [
{ name: 'Entiry | Table With Only Label', test: createTableWithOnlyLabel }, { name: 'Entiry | Table With Only Label', test: createTableWithOnlyLabel },
{ name: 'Entiry | Table With Everything But Rows', test: createTableWithEverythingButRows }, { name: 'Entiry | Table With Everything But Rows', test: createTableWithEverythingButRows },
{ name: 'Entiry | Table With Invalid Rows', test: createTableWithInvalidRows }, { name: 'Entiry | Table With Invalid Rows', test: createTableWithInvalidRows },
{ name: 'Entiry | Table With Rows as Not Array', test: createTableWithRowsAsNotArray } { name: 'Entiry | Table With Rows as Not Array', test: createTableWithRowsAsNotArray },
{ name: 'Entiry | Set Table Rows', test: setTableRows }
] ]