diff --git a/src/origdatablocks/dto/create-origdatablock.dto.ts b/src/origdatablocks/dto/create-origdatablock.dto.ts index 49653bb91..ba21f64e1 100644 --- a/src/origdatablocks/dto/create-origdatablock.dto.ts +++ b/src/origdatablocks/dto/create-origdatablock.dto.ts @@ -5,6 +5,7 @@ import { IsInt, IsOptional, IsString, + IsNotEmpty, ValidateNested, } from "class-validator"; import { DataFileDto } from "src/common/dto/datafile.dto"; @@ -20,6 +21,7 @@ export class CreateOrigDatablockDto extends OwnableDto { @IsOptional() @IsString() + @IsNotEmpty() readonly chkAlg: string; @IsArray() diff --git a/src/origdatablocks/schemas/origdatablock.schema.ts b/src/origdatablocks/schemas/origdatablock.schema.ts index 1394bce3f..055ffd116 100644 --- a/src/origdatablocks/schemas/origdatablock.schema.ts +++ b/src/origdatablocks/schemas/origdatablock.schema.ts @@ -52,7 +52,7 @@ export class OrigDatablock extends OwnableClass { description: "Algorithm used to compute the file chksum", }) @Prop({ - type: Number, + type: String, required: false, }) chkAlg: string; diff --git a/test/Instrument.js b/test/Instrument.js index eee2bb44a..a1211ac8a 100644 --- a/test/Instrument.js +++ b/test/Instrument.js @@ -8,7 +8,7 @@ let accessToken = null, accessTokenArchiveManager = null, instrumentId = null; -const newName="ESS2.5"; +const newName = "ESS2.5"; describe("Instrument: Instrument management", () => { beforeEach((done) => { @@ -44,7 +44,9 @@ describe("Instrument: Instrument management", () => { .expect(201) .expect("Content-Type", /json/) .then((res) => { - res.body.should.have.property("name").and.be.equal(TestData.InstrumentCorrect.name); + res.body.should.have + .property("name") + .and.be.equal(TestData.InstrumentCorrect.name); res.body.should.have.property("pid").and.be.string; instrumentId = res.body["pid"]; }); @@ -58,7 +60,9 @@ describe("Instrument: Instrument management", () => { .expect(200) .expect("Content-Type", /json/) .then((res) => { - res.body.should.have.property("name").and.be.equal(TestData.InstrumentCorrect.name); + res.body.should.have + .property("name") + .and.be.equal(TestData.InstrumentCorrect.name); res.body.should.have.property("pid").and.be.equal(instrumentId); }); }); @@ -72,7 +76,9 @@ describe("Instrument: Instrument management", () => { .expect("Content-Type", /json/) .then((res) => { res.body.should.be.an("array").to.have.length(1); - res.body[0].should.have.property("name").and.be.equal(TestData.InstrumentCorrect.name); + res.body[0].should.have + .property("name") + .and.be.equal(TestData.InstrumentCorrect.name); res.body[0].should.have.property("pid").and.be.equal(instrumentId); }); }); diff --git a/test/RawDatasetOrigDatablock.js b/test/RawDatasetOrigDatablock.js index 59c879852..5b02c2458 100644 --- a/test/RawDatasetOrigDatablock.js +++ b/test/RawDatasetOrigDatablock.js @@ -1,18 +1,18 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -var utils = require("./LoginUtils"); +const utils = require("./LoginUtils"); const { TestData } = require("./TestData"); describe("RawDatasetOrigDatablock: Test OrigDatablocks and their relation to raw Datasets", () => { - var accessTokenIngestor = null; - var accessTokenArchiveManager = null; - - var datasetPid = null; - - var origDatablockId1 = null; - var origDatablockId2 = null; - - var origDatablockData1 = null; - var origDatablockData2 = null; + let accessTokenIngestor = null, + accessTokenArchiveManager = null, + datasetPid = null, + origDatablockId1 = null, + origDatablockId2 = null, + origDatablockId3 = null, + origDatablockData1 = null, + origDatablockData2 = null, + origDatablockWithEmptyChkAlg = null, + origDatablockWithValidChkAlg = null; beforeEach((done) => { utils.getToken( @@ -39,6 +39,8 @@ describe("RawDatasetOrigDatablock: Test OrigDatablocks and their relation to raw origDatablockData1 = { ...TestData.OrigDataBlockCorrect1 }; origDatablockData2 = { ...TestData.OrigDataBlockCorrect2 }; + origDatablockWithEmptyChkAlg = { ...TestData.OrigDataBlockWrongChkAlg }; + origDatablockWithValidChkAlg = { ...TestData.OrigDataBlockCorrect3 }; }); it("adds a new raw dataset", async () => { @@ -102,6 +104,36 @@ describe("RawDatasetOrigDatablock: Test OrigDatablocks and their relation to raw .expect("Content-Type", /json/); }); + it("add a new origDatablock with empty chkAlg should fail", async () => { + return request(appUrl) + .post(`/api/v3/datasets/${datasetPid}/OrigDatablocks`) + .send(origDatablockWithEmptyChkAlg) + .set("Accept", "application/json") + .set({ Authorization: `Bearer ${accessTokenIngestor}` }) + .expect(400) + .expect("Content-Type", /json/) + .then((res) => { + res.body.should.have.property("error"); + }); + }); + + it("add a new origDatablock with valid chkAlg should success", async () => { + return request(appUrl) + .post(`/api/v3/datasets/${datasetPid}/OrigDatablocks`) + .send(origDatablockWithValidChkAlg) + .set("Accept", "application/json") + .set({ Authorization: `Bearer ${accessTokenIngestor}` }) + .expect(201) + .expect("Content-Type", /json/) + .then((res) => { + res.body.should.have + .property("chkAlg") + .and.equal(TestData.OrigDataBlockCorrect3.chkAlg); + res.body.should.have.property("id").and.be.string; + origDatablockId3 = encodeURIComponent(res.body["id"]); + }); + }); + it("adds a new origDatablock with correct account", async () => { return request(appUrl) .post(`/api/v3/datasets/${datasetPid}/OrigDatablocks`) @@ -144,9 +176,22 @@ describe("RawDatasetOrigDatablock: Test OrigDatablocks and their relation to raw .expect(200) .expect("Content-Type", /json/) .then((res) => { - res.body.should.be.instanceof(Array).and.to.have.length(2); - res.body[0]["id"].should.be.oneOf([origDatablockId1, origDatablockId2]); - res.body[1]["id"].should.be.oneOf([origDatablockId1, origDatablockId2]); + res.body.should.be.instanceof(Array).and.to.have.length(3); + res.body[0]["id"].should.be.oneOf([ + origDatablockId1, + origDatablockId2, + origDatablockId3, + ]); + res.body[1]["id"].should.be.oneOf([ + origDatablockId1, + origDatablockId2, + origDatablockId3, + ]); + res.body[2]["id"].should.be.oneOf([ + origDatablockId1, + origDatablockId2, + origDatablockId3, + ]); }); }); @@ -160,7 +205,8 @@ describe("RawDatasetOrigDatablock: Test OrigDatablocks and their relation to raw .then((res) => { res.body["size"].should.be.equal( TestData.OrigDataBlockCorrect1.size + - TestData.OrigDataBlockCorrect2.size, + TestData.OrigDataBlockCorrect2.size + + TestData.OrigDataBlockCorrect3.size, ); }); }); @@ -196,8 +242,8 @@ describe("RawDatasetOrigDatablock: Test OrigDatablocks and their relation to raw res.body["pid"].should.be.equal(decodeURIComponent(datasetPid)); res.body.origdatablocks.should.be .instanceof(Array) - .and.to.have.length(2); - res.body.origdatablocks[0].should.have + .and.to.have.length(3); + res.body.origdatablocks[1].should.have .property("dataFileList") .and.be.instanceof(Array) .and.to.have.length( @@ -318,13 +364,15 @@ describe("RawDatasetOrigDatablock: Test OrigDatablocks and their relation to raw .property("size") .and.equal( TestData.OrigDataBlockCorrect1.size + - TestData.OrigDataBlockCorrect2.size, + TestData.OrigDataBlockCorrect2.size + + TestData.OrigDataBlockCorrect3.size, ); res.body.should.have .property("numberOfFiles") .and.equal( TestData.OrigDataBlockCorrect1.dataFileList.length + - TestData.OrigDataBlockCorrect2.dataFileList.length, + TestData.OrigDataBlockCorrect2.dataFileList.length + + TestData.OrigDataBlockCorrect3.dataFileList.length, ); }); }); @@ -349,6 +397,16 @@ describe("RawDatasetOrigDatablock: Test OrigDatablocks and their relation to raw .expect(200); }); + it("should delete third OrigDatablock", async () => { + return request(appUrl) + .delete( + `/api/v3/datasets/${datasetPid}/OrigDatablocks/${origDatablockId3}`, + ) + .set("Accept", "application/json") + .set({ Authorization: `Bearer ${accessTokenArchiveManager}` }) + .expect(200); + }); + it("Should fetch no origdatablocks belonging to the new dataset", async () => { return request(appUrl) .get(`/api/v3/Datasets/${datasetPid}/OrigDatablocks`) diff --git a/test/TestData.js b/test/TestData.js index 77390765a..ea2f33a70 100644 --- a/test/TestData.js +++ b/test/TestData.js @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ const { faker } = require("@faker-js/faker"); const TestData = { @@ -565,9 +566,38 @@ const TestData = { ], }, + OrigDataBlockCorrect3: { + chkAlg: "Test-chkAlg", + size: 41780189, + dataFileList: [ + { + path: "N1039-1.tif", + size: 8356037, + time: "2017-07-24T13:56:30.000Z", + uid: "egon.meiera@psi.ch", + gid: "p16738", + perm: "-rw-rw-r--", + }, + ], + }, + OrigDataBlockWrong: { size: "This is wrong", }, + OrigDataBlockWrongChkAlg: { + chkAlg: "", + size: 41780189, + dataFileList: [ + { + path: "N1039-1.tif", + size: 8356037, + time: "2017-07-24T13:56:30.000Z", + uid: "egon.meiera@psi.ch", + gid: "p16738", + perm: "-rw-rw-r--", + }, + ], + }, DatasetLifecycle_query_1: { fields: {