diff --git a/package.json b/package.json index dac711c3..1da071dd 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "start:build": "builder run start", "test": "mocha --recursive", "test:no-lbc": "npm test -- --grep @usesLbc --invert", + "test:server": "mocha --recursive './server/**/*.test.js'", "transpile": "builder concurrent transpile:server transpile:client transpile:client_custom", "transpile:dev": "builder concurrent transpile:server:dev transpile:client:dev transpile:client_custom:dev", "transpile:server": "babel server/render/src -d server/render/build", diff --git a/server/controllers/api/claim/publish/parsePublishApiRequestBody.test.js b/server/controllers/api/claim/publish/parsePublishApiRequestBody.test.js new file mode 100644 index 00000000..e1a43c99 --- /dev/null +++ b/server/controllers/api/claim/publish/parsePublishApiRequestBody.test.js @@ -0,0 +1,15 @@ +const chai = require('chai'); +const expect = chai.expect; + +describe('#parsePublishApiRequestBody()', function () { + const parsePublishApiRequestBody = require('./parsePublishApiRequestBody.js'); + + it('should throw an error if no body', function () { + expect(parsePublishApiRequestBody.bind(this, null)).to.throw(); + }); + + it('should throw an error if no body.name', function () { + const bodyNoName = {}; + expect(parsePublishApiRequestBody.bind(this, bodyNoName)).to.throw(); + }); +}); diff --git a/server/controllers/api/claim/publish/parsePublishApiRequestFiles.test.js b/server/controllers/api/claim/publish/parsePublishApiRequestFiles.test.js new file mode 100644 index 00000000..2eb7733d --- /dev/null +++ b/server/controllers/api/claim/publish/parsePublishApiRequestFiles.test.js @@ -0,0 +1,51 @@ +const chai = require('chai'); +const expect = chai.expect; + +describe('#parsePublishApiRequestFiles()', function () { + const parsePublishApiRequestFiles = require('./parsePublishApiRequestFiles.js'); + + it('should throw an error if no files', function () { + expect(parsePublishApiRequestFiles.bind(this, null)).to.throw(); + }); + + it('should throw an error if no files.file', function () { + const filesNoFile = {}; + expect(parsePublishApiRequestFiles.bind(this, filesNoFile)).to.throw(); + }); + + it('should throw an error if file.size is too large', function () { + const filesTooBig = { + file: { + name: 'file.jpg', + path: '/path/to/file.jpg', + type: 'image/jpg', + size: 10000001, + }, + }; + expect(parsePublishApiRequestFiles.bind(this, filesTooBig)).to.throw(); + }); + + it('should throw error if not an accepted file type', function () { + const filesWrongType = { + file: { + name: 'file.jpg', + path: '/path/to/file.jpg', + type: 'someType/ext', + size: 10000000, + }, + }; + expect(parsePublishApiRequestFiles.bind(this, filesWrongType)).to.throw(); + }); + + it('should throw NO error if no problems', function () { + const filesNoProblems = { + file: { + name: 'file.jpg', + path: '/path/to/file.jpg', + type: 'image/jpg', + size: 10000000, + }, + }; + expect(parsePublishApiRequestFiles.bind(this, filesNoProblems)).to.not.throw(); + }); +}); diff --git a/server/models/claim.js b/server/models/claim.js index 2fa6edc6..08bd7c6b 100644 --- a/server/models/claim.js +++ b/server/models/claim.js @@ -401,5 +401,10 @@ module.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => { }); }; + Claim.getCurrentHeight = function () { + return this + .max('height'); + }; + return Claim; }; diff --git a/server/models/utils/createClaimRecordData.js b/server/models/utils/createClaimRecordData.js index 91e25ca3..547b6158 100644 --- a/server/models/utils/createClaimRecordData.js +++ b/server/models/utils/createClaimRecordData.js @@ -1,3 +1,5 @@ +const db = require('../index.js'); + const createClaimRecordDataAfterPublish = (certificateId, channelName, fileName, fileType, publishParams, publishResults) => { const { name, @@ -17,21 +19,24 @@ const createClaimRecordDataAfterPublish = (certificateId, channelName, fileName, nout, } = publishResults; - return { - name, - claimId, - title, - description, - address, - thumbnail, - outpoint : `${txid}:${nout}`, - height : 0, - contentType: fileType, - nsfw, - amount, - certificateId, - channelName, - }; + return db.Claim.getCurrentHeight() + .then(height => { + return { + name, + claimId, + title, + description, + address, + thumbnail, + outpoint : `${txid}:${nout}`, + height, + contentType: fileType, + nsfw, + amount, + certificateId, + channelName, + }; + }); }; module.exports = { diff --git a/server/models/utils/returnShortId.test.js b/server/models/utils/returnShortId.test.js new file mode 100644 index 00000000..56b8cbb9 --- /dev/null +++ b/server/models/utils/returnShortId.test.js @@ -0,0 +1,42 @@ +const chai = require('chai'); +const expect = chai.expect; + +describe('#parsePublishApiRequestBody()', function () { + const returnShortId = require('./returnShortId.js'); + let dummyClaimsArray; + let dummyLongId; + + it('should thow an error if the claimId is not in the claim list', function () { + dummyClaimsArray = [ + {claimId: 'a123456789'}, + {claimId: 'b123456789'}, + {claimId: 'c123456789'}, + ]; + dummyLongId = 'xxxxxxxxxx'; + expect(returnShortId.bind(this, dummyClaimsArray, dummyLongId)).to.throw(); + }); + + it('should return the shortest unique claim id', function () { + dummyClaimsArray = [ + {claimId: 'a123456789'}, + {claimId: 'b123456789'}, + {claimId: 'c123456789'}, + ]; + dummyLongId = 'c123456789'; + expect(returnShortId(dummyClaimsArray, dummyLongId)).to.equal('c'); + }); + + it('if there is a conflict between unqiue ids, it should give preference to the one with the lowest height', function () { + dummyClaimsArray = [ + {claimId: 'a123456789', height: 10}, + {claimId: 'ab12345678', height: 11}, + {claimId: 'ab12341111', height: 12}, + ]; + dummyLongId = 'a123456789'; + expect(returnShortId(dummyClaimsArray, dummyLongId)).to.equal('a'); + dummyLongId = 'ab12345678'; + expect(returnShortId(dummyClaimsArray, dummyLongId)).to.equal('ab'); + dummyLongId = 'ab12341111'; + expect(returnShortId(dummyClaimsArray, dummyLongId)).to.equal('ab12341'); + }); +}); diff --git a/test/end-to-end/end-to-end.tests.js b/test/end-to-end/end-to-end.test.js similarity index 99% rename from test/end-to-end/end-to-end.tests.js rename to test/end-to-end/end-to-end.test.js index ee055b0a..4c6f2e35 100644 --- a/test/end-to-end/end-to-end.tests.js +++ b/test/end-to-end/end-to-end.test.js @@ -1,3 +1,5 @@ +require('../module-alias-boilerplate.js'); + const chai = require('chai'); const expect = chai.expect; const chaiHttp = require('chai-http'); diff --git a/test/module-alias-boilerplate.js b/test/module-alias-boilerplate.js new file mode 100644 index 00000000..1001e4be --- /dev/null +++ b/test/module-alias-boilerplate.js @@ -0,0 +1,4 @@ +// set up aliases +const moduleAlias = require('module-alias'); +const customAliases = require('../utils/createModuleAliases.js')(); +moduleAlias.addAliases(customAliases); diff --git a/test/unit/publish/utils.test.js b/test/unit/publish/utils.test.js deleted file mode 100644 index 4d8aac20..00000000 --- a/test/unit/publish/utils.test.js +++ /dev/null @@ -1,72 +0,0 @@ -const chai = require('chai'); -const expect = chai.expect; - -describe('publish utils', function () { - - describe('#parsePublishApiRequestBody()', function () { - const parsePublishApiRequestBody = require('../../../server/controllers/api/claim/publish/parsePublishApiRequestBody.js'); - - it('should throw an error if no body', function () { - expect(parsePublishApiRequestBody.bind(this, null)).to.throw(); - }); - - it('should throw an error if no body.name', function () { - const bodyNoName = {}; - expect(parsePublishApiRequestBody.bind(this, bodyNoName)).to.throw(); - }); - - }); - - describe('#parsePublishApiRequestFiles()', function () { - const parsePublishApiRequestFiles = require('../../../server/controllers/api/claim/publish/parsePublishApiRequestFiles.js'); - - it('should throw an error if no files', function () { - expect(parsePublishApiRequestFiles.bind(this, null)).to.throw(); - }); - - it('should throw an error if no files.file', function () { - const filesNoFile = {}; - expect(parsePublishApiRequestFiles.bind(this, filesNoFile)).to.throw(); - }); - - it('should throw an error if file.size is too large', function () { - const filesTooBig = { - file: { - name: 'file.jpg', - path: '/path/to/file.jpg', - type: 'image/jpg', - size: 10000001, - }, - }; - expect(parsePublishApiRequestFiles.bind(this, filesTooBig)).to.throw(); - }); - - it('should throw error if not an accepted file type', function () { - const filesWrongType = { - file: { - name: 'file.jpg', - path: '/path/to/file.jpg', - type: 'someType/ext', - size: 10000000, - }, - }; - expect(parsePublishApiRequestFiles.bind(this, filesWrongType)).to.throw(); - }); - - it('should throw NO error if no problems', function () { - const filesNoProblems = { - file: { - name: 'file.jpg', - path: '/path/to/file.jpg', - type: 'image/jpg', - size: 10000000, - }, - }; - expect(parsePublishApiRequestFiles.bind(this, filesNoProblems)).to.not.throw(); - }); - }); - - describe('#parsePublishApiChannel()', function () { - it('should pass the tests I write here'); - }); -}); diff --git a/utils/createModuleAliases.js b/utils/createModuleAliases.js index 036c56e3..7a494bf6 100644 --- a/utils/createModuleAliases.js +++ b/utils/createModuleAliases.js @@ -26,6 +26,7 @@ module.exports = () => { let moduleAliases = {}; // aliases for configs moduleAliases['@config'] = resolve(`config`); + moduleAliases['@devConfig'] = resolve(`devConfig`); // create specific aliases for locally defined components moduleAliases = addAlliasesForFolder('containers', moduleAliases);