Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add tests for model definitions #235

Merged
merged 2 commits into from
Apr 9, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,20 @@ steps:

- wait

- label: ":eslint: Lint"
- label: ":yarn: :eslint: Lint"
command: yarn lint
plugins:
- docker-compose#v3.7.0:
run: app
config: docker-compose.buildkite.yml

- label: ":yarn: Test"
command: yarn test
plugins:
- docker-compose#v3.7.0:
run: app
config: docker-compose.buildkite.yml

- wait

- label: ":docker: Build+Push `:staging` image"
Expand Down
10 changes: 8 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
"repository": "github:guidojw/arora-api",
"main": "app.js",
"scripts": {
"lint": "eslint src db",
"start": "npm explore bloxy -- npm run build ; node ./bin/www",
"start:dev": "nodemon ./bin/www",
"lint": "eslint src db"
"test": "mocha --require ./test/helper.js --recursive "
},
"author": "Guido de Jong",
"license": "MIT",
Expand Down Expand Up @@ -36,11 +37,16 @@
"ws": "^7.4.4"
},
"devDependencies": {
"chai": "^4.3.4",
"eslint": "^7.23.0",
"eslint-config-standard": "^16.0.2",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.3.1",
"nodemon": "^2.0.7"
"mocha": "^8.3.2",
"nodemon": "^2.0.7",
"sequelize-test-helpers": "^1.3.2",
"sinon": "^10.0.1",
"sinon-chai": "^3.6.0"
}
}
6 changes: 6 additions & 0 deletions test/helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
'use strict'

const chai = require('chai')
const sinonChai = require('sinon-chai')

chai.use(sinonChai)
41 changes: 41 additions & 0 deletions test/unit/models/ban-cancellation.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
'use strict'

const { expect } = require('chai')
const {
checkModelName,
checkPropertyExists,
dataTypes,
sequelize
} = require('sequelize-test-helpers')

const BanCancellationModel = require('../../../src/models/ban-cancellation')
const BanModel = require('../../../src/models/ban')

describe('src/models/ban-cancellation', () => {
const BanCancellation = BanCancellationModel(sequelize, dataTypes)
const banCancellation = new BanCancellation()

checkModelName(BanCancellation)('BanCancellation')

context('properties', () => {
['authorId', 'reason'].forEach(checkPropertyExists(banCancellation))
})

context('associations', () => {
const Ban = BanModel(sequelize, dataTypes)

before(() => {
BanCancellation.associate({ Ban })
})

it('defined a belongsTo association with Ban', () => {
expect(BanCancellation.belongsTo).to.have.been.calledWith(Ban, {
foreignKey: {
allowNull: false,
name: 'banId'
},
onDelete: 'CASCADE'
})
})
})
})
40 changes: 40 additions & 0 deletions test/unit/models/ban.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'use strict'

const { expect } = require('chai')
const {
checkModelName,
checkPropertyExists,
dataTypes,
sequelize
} = require('sequelize-test-helpers')

const BanModel = require('../../../src/models/ban')
const BanCancellationModel = require('../../../src/models/ban-cancellation')

describe('src/models/ban', () => {
const Ban = BanModel(sequelize, dataTypes)
const ban = new Ban()

checkModelName(Ban)('Ban')

context('properties', () => {
['authorId', 'date', 'groupId', 'rank', 'reason', 'userId'].forEach(checkPropertyExists(ban))
})

context('associations', () => {
const BanCancellation = BanCancellationModel(sequelize, dataTypes)

before(() => {
Ban.associate({ BanCancellation })
})

it('defined a hasOne association with BanCancellation', () => {
expect(Ban.hasOne).to.have.been.calledWith(BanCancellation, {
foreignKey: {
allowNull: false,
name: 'banId'
}
})
})
})
})
21 changes: 21 additions & 0 deletions test/unit/models/exile.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
'use strict'

const {
checkModelName,
checkPropertyExists,
dataTypes,
sequelize
} = require('sequelize-test-helpers')

const ExileModel = require('../../../src/models/exile')

describe('src/models/ban', () => {
const Exile = ExileModel(sequelize, dataTypes)
const exile = new Exile()

checkModelName(Exile)('Exile')

context('properties', () => {
['groupId', 'userId'].forEach(checkPropertyExists(exile))
})
})
21 changes: 21 additions & 0 deletions test/unit/models/payout.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
'use strict'

const {
checkModelName,
checkPropertyExists,
dataTypes,
sequelize
} = require('sequelize-test-helpers')

const PayoutModel = require('../../../src/models/payout')

describe('src/models/payout', () => {
const Payout = PayoutModel(sequelize, dataTypes)
const payout = new Payout()

checkModelName(Payout)('Payout')

context('properties', () => {
['groupId', 'until'].forEach(checkPropertyExists(payout))
})
})
41 changes: 41 additions & 0 deletions test/unit/models/suspension-cancellation.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
'use strict'

const { expect } = require('chai')
const {
checkModelName,
checkPropertyExists,
dataTypes,
sequelize
} = require('sequelize-test-helpers')

const SuspensionCancellationModel = require('../../../src/models/suspension-cancellation')
const SuspensionModel = require('../../../src/models/suspension')

describe('src/models/suspension-cancellation', () => {
const SuspensionCancellation = SuspensionCancellationModel(sequelize, dataTypes)
const suspensionCancellation = new SuspensionCancellation()

checkModelName(SuspensionCancellation)('SuspensionCancellation')

context('properties', () => {
['authorId', 'reason'].forEach(checkPropertyExists(suspensionCancellation))
})

context('associations', () => {
const Suspension = SuspensionModel(sequelize, dataTypes)

before(() => {
SuspensionCancellation.associate({ Suspension })
})

it('defined a belongsTo association with Suspension', () => {
expect(SuspensionCancellation.belongsTo).to.have.been.calledWith(Suspension, {
foreignKey: {
allowNull: false,
name: 'suspensionId'
},
onDelete: 'CASCADE'
})
})
})
})
41 changes: 41 additions & 0 deletions test/unit/models/suspension-extension.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
'use strict'

const { expect } = require('chai')
const {
checkModelName,
checkPropertyExists,
dataTypes,
sequelize
} = require('sequelize-test-helpers')

const SuspensionExtensionModel = require('../../../src/models/suspension-extension')
const SuspensionModel = require('../../../src/models/suspension')

describe('src/models/suspension-extension', () => {
const SuspensionExtension = SuspensionExtensionModel(sequelize, dataTypes)
const suspensionExtension = new SuspensionExtension()

checkModelName(SuspensionExtension)('SuspensionExtension')

context('properties', () => {
['authorId', 'duration', 'reason'].forEach(checkPropertyExists(suspensionExtension))
})

context('associations', () => {
const Suspension = SuspensionModel(sequelize, dataTypes)

before(() => {
SuspensionExtension.associate({ Suspension })
})

it('defined a belongsTo association with Suspension', () => {
expect(SuspensionExtension.belongsTo).to.have.been.calledWith(Suspension, {
foreignKey: {
allowNull: false,
name: 'suspensionId'
},
onDelete: 'CASCADE'
})
})
})
})
54 changes: 54 additions & 0 deletions test/unit/models/suspension.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
'use strict'

const { expect } = require('chai')
const {
checkModelName,
checkPropertyExists,
dataTypes,
sequelize
} = require('sequelize-test-helpers')

const SuspensionModel = require('../../../src/models/suspension')
const SuspensionCancellationModel = require('../../../src/models/suspension-cancellation')
const SuspensionExtensionModel = require('../../../src/models/suspension-extension')

describe('src/models/suspension', () => {
const Suspension = SuspensionModel(sequelize, dataTypes)
const suspension = new Suspension()

checkModelName(Suspension)('Suspension')

context('properties', () => {
[
'authorId', 'date', 'duration', 'groupId', 'rank', 'rankBack', 'reason', 'userId'
].forEach(checkPropertyExists(suspension))
})

context('associations', () => {
const SuspensionCancellation = SuspensionCancellationModel(sequelize, dataTypes)
const SuspensionExtension = SuspensionExtensionModel(sequelize, dataTypes)

before(() => {
Suspension.associate({ SuspensionCancellation, SuspensionExtension })
})

it('defined a hasOne association with SuspensionCancellation', () => {
expect(Suspension.hasOne).to.have.been.calledWith(SuspensionCancellation, {
foreignKey: {
allowNull: false,
name: 'suspensionId'
}
})
})

it('defined a hasMany association with SuspensionExtension', () => {
expect(Suspension.hasMany).to.have.been.calledWith(SuspensionExtension, {
foreignKey: {
allowNull: false,
name: 'suspensionId'
},
as: 'extensions'
})
})
})
})
41 changes: 41 additions & 0 deletions test/unit/models/training-cancellation.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
'use strict'

const { expect } = require('chai')
const {
checkModelName,
checkPropertyExists,
dataTypes,
sequelize
} = require('sequelize-test-helpers')

const TrainingCancellationModel = require('../../../src/models/training-cancellation')
const TrainingModel = require('../../../src/models/training')

describe('src/models/training-cancellation', () => {
const TrainingCancellation = TrainingCancellationModel(sequelize, dataTypes)
const trainingCancellation = new TrainingCancellation()

checkModelName(TrainingCancellation)('TrainingCancellation')

context('properties', () => {
['authorId', 'reason'].forEach(checkPropertyExists(trainingCancellation))
})

context('associations', () => {
const Training = TrainingModel(sequelize, dataTypes)

before(() => {
TrainingCancellation.associate({ Training })
})

it('defined a belongsTo association with Training', () => {
expect(TrainingCancellation.belongsTo).to.have.been.calledWith(Training, {
foreignKey: {
allowNull: false,
name: 'trainingId'
},
onDelete: 'CASCADE'
})
})
})
})
Loading