crud and http controller
This commit is contained in:
parent
cba12be4b1
commit
c27c061c15
51 changed files with 930 additions and 387 deletions
|
@ -1,6 +1,12 @@
|
|||
import { delay } from "../../src/core/helper/delay.js";
|
||||
import mongoose from "mongoose";
|
||||
import { delay } from "../../src/core/helper/delay";
|
||||
import { Result } from "../../src/core/helper/result";
|
||||
import { TypedEvent } from "../../src/core/helper/typed_event.js";
|
||||
import { TypedEvent } from "../../src/core/helper/typed_event";
|
||||
|
||||
|
||||
export const before = async () =>{
|
||||
await mongoose.connection.dropDatabase()
|
||||
}
|
||||
|
||||
export class TestCore {
|
||||
allTests = 0;
|
||||
|
@ -23,7 +29,7 @@ export class TestCore {
|
|||
console.log("\x1b[31m", "❌ - " + testName);
|
||||
};
|
||||
|
||||
testResult = () => {
|
||||
testResult = async () => {
|
||||
console.log("\x1b[32m", "=============");
|
||||
|
||||
if (this.allTests - this.testOk === 0) {
|
||||
|
@ -37,6 +43,7 @@ export class TestCore {
|
|||
console.log("\x1b[31m", "❌ test error:" + String(this.testErr));
|
||||
console.log("\x1b[32m", `✅ test success! ${this.testOk}`);
|
||||
}
|
||||
await before()
|
||||
};
|
||||
resultTest = async (
|
||||
eventClass: TypedEvent<Result<any, any>> | any,
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import { delay } from "../../src/core/helper/delay.js";
|
||||
import { EXEC_TYPE } from "../../src/core/model/exec_error_model.js";
|
||||
import { ExecutorResult } from "../../src/core/model/executor_result.js";
|
||||
import { ExecutorProgramService } from "../../src/core/services/executor_program_service.js";
|
||||
import { TestCore } from "../core/test_core.js";
|
||||
import { resultTest as resultTest, dirname__ } from "../test.js";
|
||||
import { delay } from "../../src/core/helper/delay";
|
||||
import { EXEC_TYPE } from "../../src/core/model/exec_error_model";
|
||||
import { ExecutorResult } from "../../src/core/model/executor_result";
|
||||
import { ExecutorProgramService } from "../../src/core/services/executor_program_service";
|
||||
import { TestCore } from "../core/test_core";
|
||||
import { resultTest as resultTest, dirname__ } from "../test";
|
||||
import { Worker } from "node:cluster";
|
||||
|
||||
export class ExecutorProgramServiceTest extends ExecutorProgramService {
|
||||
|
@ -19,7 +19,7 @@ export class ExecutorProgramServiceTest extends ExecutorProgramService {
|
|||
dirname__ + "/"
|
||||
);
|
||||
executorProgramService.call(EXEC_TYPE.SPAWN, "node", [
|
||||
"./mocks/log_code.js",
|
||||
"./mocks/log_code",
|
||||
]);
|
||||
const test = TestCore.instance;
|
||||
let testIsOk = false;
|
||||
|
@ -45,7 +45,7 @@ export class ExecutorProgramServiceTest extends ExecutorProgramService {
|
|||
const executorProgramService = await new ExecutorProgramService(dirname__);
|
||||
executorProgramService.call(
|
||||
EXEC_TYPE.EXEC,
|
||||
"node ./test/mocks/log_code.js"
|
||||
"node ./test/mocks/log_code"
|
||||
);
|
||||
const test = TestCore.instance;
|
||||
executorProgramService.on((e) => {
|
||||
|
@ -63,7 +63,7 @@ export class ExecutorProgramServiceTest extends ExecutorProgramService {
|
|||
const executorProgramService = await new ExecutorProgramService("", 1000);
|
||||
executorProgramService.call(
|
||||
EXEC_TYPE.EXEC,
|
||||
"node ./test/mocks/long_code.js"
|
||||
"node ./test/mocks/long_code"
|
||||
);
|
||||
await delay(1500);
|
||||
const worker = executorProgramService.worker as Worker;
|
||||
|
@ -73,7 +73,7 @@ export class ExecutorProgramServiceTest extends ExecutorProgramService {
|
|||
private resultsTests = async () => {
|
||||
await resultTest(
|
||||
new ExecutorProgramService(dirname__),
|
||||
[EXEC_TYPE.EXEC, "node ./mocks/error.js"],
|
||||
[EXEC_TYPE.EXEC, "node ./mocks/error"],
|
||||
"ExecutorProgramService EXEC_TYPE.EXEC on Result.error",
|
||||
false,
|
||||
4000
|
||||
|
@ -94,7 +94,7 @@ export class ExecutorProgramServiceTest extends ExecutorProgramService {
|
|||
);
|
||||
await resultTest(
|
||||
new ExecutorProgramService(dirname__),
|
||||
[EXEC_TYPE.SPAWN, "python3 ./mocks/s.js"],
|
||||
[EXEC_TYPE.SPAWN, "python3 ./mocks/s"],
|
||||
"ExecutorProgramService EXEC_TYPE.SPAWN on Result.error",
|
||||
false,
|
||||
2000
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import * as fs from "fs";
|
||||
import { FilesChangeNotifierService } from "../../src/core/services/files_change_notifier_service.js";
|
||||
import { EventsFileChanger } from "../../src/core/model/meta_data_file_manager_model.js";
|
||||
import { assert, dirname__ } from "../test.js";
|
||||
import { delay } from "../../src/core/helper/delay.js";
|
||||
import { FilesChangeNotifierService } from "../../src/core/services/files_change_notifier_service";
|
||||
import { EventsFileChanger } from "../../src/core/model/meta_data_file_manager_model";
|
||||
import { assert, dirname__ } from "../test";
|
||||
import { delay } from "../../src/core/helper/delay";
|
||||
|
||||
export class FilesChangerTest extends FilesChangeNotifierService {
|
||||
directory = dirname__ + "/context/";
|
||||
|
|
|
@ -4,12 +4,13 @@ import * as fs from "fs";
|
|||
import {
|
||||
IssueType,
|
||||
StackGenerateType,
|
||||
TriggerType,
|
||||
} from "../../src/core/model/process_model.js";
|
||||
import { EXEC_TYPE } from "../../src/core/model/exec_error_model.js";
|
||||
import { StackService } from "../../src/core/services/stack_service.js";
|
||||
import { delay } from "../../src/core/helper/delay.js";
|
||||
import { assert, dirname__ } from "../test.js";
|
||||
|
||||
} from "../../src/core/model/process_model";
|
||||
import { EXEC_TYPE } from "../../src/core/model/exec_error_model";
|
||||
import { StackService } from "../../src/core/services/stack_service";
|
||||
import { delay } from "../../src/core/helper/delay";
|
||||
import { assert, dirname__ } from "../test";
|
||||
import { TriggerType } from "../../src/features/triggers/trigger_model";
|
||||
|
||||
abstract class IStackServiceTest {
|
||||
abstract test(): Promise<boolean>;
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
import {
|
||||
EventsFileChanger,
|
||||
MetaDataFileManagerModel,
|
||||
} from "../../src/core/model/meta_data_file_manager_model.js";
|
||||
import { TriggerType } from "../../src/core/model/process_model.js";
|
||||
import { TriggerService } from "../../src/core/services/trigger_service.js";
|
||||
import { assert } from "../test.js";
|
||||
} from "../../src/core/model/meta_data_file_manager_model";
|
||||
|
||||
import { TriggerService } from "../../src/core/services/trigger_service";
|
||||
import { TriggerType } from "../../src/features/triggers/trigger_model";
|
||||
import { assert } from "../test";
|
||||
abstract class TriggerTest {
|
||||
abstract test(): Promise<boolean>;
|
||||
}
|
||||
|
|
15
server/test/model/test_db_mongo_model.ts
Normal file
15
server/test/model/test_db_mongo_model.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import { Schema, model } from "mongoose";
|
||||
|
||||
export interface ITestModel{
|
||||
_id?: string;
|
||||
result: string;
|
||||
}
|
||||
|
||||
export const TestSchema = new Schema({
|
||||
result: String,
|
||||
});
|
||||
|
||||
const schema = "Test";
|
||||
|
||||
export const TestDBModel = model<ITestModel>(schema, TestSchema);
|
||||
|
|
@ -1,29 +1,53 @@
|
|||
import locator from "../src/core/di/register_di.js";
|
||||
import { UnitTestEnv } from "../src/core/di/env.js";
|
||||
import { fileURLToPath } from "url";
|
||||
import { TestCore } from "./core/test_core";
|
||||
import { UnitTestEnv } from "../src/core/di/env";
|
||||
import { dirname } from "path";
|
||||
import { ExecutorProgramServiceTest } from "./features/executor_program_service_test.js";
|
||||
import { FilesChangerTest } from "./features/files_change_notifier_service_test.js";
|
||||
import { TestCore } from "./core/test_core.js";
|
||||
import "reflect-metadata";
|
||||
import { StackServiceTest } from "./features/stack_service_test.js";
|
||||
import { TriggerServiceTest } from "./features/trigger_service_test.js";
|
||||
import locator from "../src/core/di/register_di";
|
||||
import { ExecutorProgramServiceTest } from "./features/executor_program_service_test";
|
||||
import { FilesChangerTest } from "./features/files_change_notifier_service_test";
|
||||
import { TriggerServiceTest } from "./features/trigger_service_test";
|
||||
import { StackServiceTest } from "./features/stack_service_test";
|
||||
import mongoose from "mongoose";
|
||||
import { CreateDataBaseModelUseCaseTest } from "./usecase/create_database_model_usecase_test";
|
||||
import { DeleteDataBaseModelUseCaseTest } from "./usecase/delete_database_model_usecase_test";
|
||||
import { ReadDataBaseModelUseCaseTest } from "./usecase/read_database_model_usecase_test";
|
||||
import { UpdateDataBaseModelUseCaseTest } from "./usecase/update_database_model_usecase";
|
||||
import { PaginationDataBaseModelUseCaseTest } from "./usecase/pagination_database_model_usecase_test";
|
||||
|
||||
|
||||
const testCore = TestCore.instance;
|
||||
const __filename: string = fileURLToPath(import.meta.url);
|
||||
|
||||
|
||||
export const dirname__: string = dirname(__filename);
|
||||
export const assert = testCore.assert;
|
||||
export const resultTest = testCore.resultTest;
|
||||
const env = new UnitTestEnv(dirname__);
|
||||
|
||||
locator(env);
|
||||
|
||||
const main = async () => {
|
||||
const tests = [CreateDataBaseModelUseCaseTest, DeleteDataBaseModelUseCaseTest,ReadDataBaseModelUseCaseTest,UpdateDataBaseModelUseCaseTest, PaginationDataBaseModelUseCaseTest]
|
||||
const init = async () =>{
|
||||
await mongoose.connect('mongodb://127.0.0.1:27017/test')
|
||||
}
|
||||
|
||||
const test = async () =>{
|
||||
await new ExecutorProgramServiceTest(dirname__).test();
|
||||
await new FilesChangerTest(dirname__).test();
|
||||
await new StackServiceTest(dirname__ + "/context/").test();
|
||||
await new TriggerServiceTest().test();
|
||||
await new CreateDataBaseModelUseCaseTest().test()
|
||||
|
||||
await new CreateDataBaseModelUseCaseTest().test()
|
||||
await new DeleteDataBaseModelUseCaseTest().test()
|
||||
await new ReadDataBaseModelUseCaseTest().test()
|
||||
await new UpdateDataBaseModelUseCaseTest().test()
|
||||
for await (const usecase of tests) {
|
||||
testCore.assert(await new usecase().test(), usecase.name)
|
||||
}
|
||||
}
|
||||
const main = async () => {
|
||||
await init()
|
||||
await test()
|
||||
|
||||
|
||||
await testCore.testResult();
|
||||
};
|
||||
|
||||
|
|
12
server/test/usecase/create_database_model_usecase_test.ts
Normal file
12
server/test/usecase/create_database_model_usecase_test.ts
Normal file
|
@ -0,0 +1,12 @@
|
|||
import { CreateDataBaseModelUseCase } from "../../src/core/usecases/create_database_model_usecase";
|
||||
import { ITestModel, TestDBModel } from "../model/test_db_mongo_model";
|
||||
|
||||
export class CreateDataBaseModelUseCaseTest {
|
||||
async test() {
|
||||
return (
|
||||
await new CreateDataBaseModelUseCase<ITestModel>(TestDBModel).call({
|
||||
result: "test",
|
||||
})
|
||||
).isSuccess();
|
||||
}
|
||||
}
|
29
server/test/usecase/delete_database_model_usecase_test.ts
Normal file
29
server/test/usecase/delete_database_model_usecase_test.ts
Normal file
|
@ -0,0 +1,29 @@
|
|||
import { CreateDataBaseModelUseCase } from "../../src/core/usecases/create_database_model_usecase";
|
||||
import { DeleteDataBaseModelUseCase } from "../../src/core/usecases/delete_database_model_usecase";
|
||||
import { ITestModel, TestDBModel } from "../model/test_db_mongo_model";
|
||||
|
||||
export class DeleteDataBaseModelUseCaseTest {
|
||||
async test() {
|
||||
let testIsSuccess = false;
|
||||
|
||||
const result = await new CreateDataBaseModelUseCase<ITestModel>(TestDBModel).call({
|
||||
result: "test",
|
||||
});
|
||||
|
||||
await result.fold(
|
||||
async (s) => {
|
||||
(await new DeleteDataBaseModelUseCase(TestDBModel).call(s.id)).fold(
|
||||
(_s1) => {
|
||||
testIsSuccess = true;
|
||||
},
|
||||
(_e1) => {}
|
||||
);
|
||||
},
|
||||
async (_e) => {
|
||||
return;
|
||||
}
|
||||
);
|
||||
|
||||
return testIsSuccess;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
import { PaginationDataBaseModelUseCase } from "../../src/core/usecases/pagination_database_model_usecase";
|
||||
import { ITestModel, TestDBModel } from "../model/test_db_mongo_model";
|
||||
|
||||
export class PaginationDataBaseModelUseCaseTest {
|
||||
async test() {
|
||||
let testIsSuccess = false;
|
||||
await (
|
||||
await new PaginationDataBaseModelUseCase<ITestModel>(TestDBModel, 1).call(
|
||||
1
|
||||
)
|
||||
).fold(
|
||||
(s) => {
|
||||
testIsSuccess = s.length === 1;
|
||||
},
|
||||
(_e) => {}
|
||||
);
|
||||
return testIsSuccess;
|
||||
}
|
||||
}
|
32
server/test/usecase/read_database_model_usecase_test.ts
Normal file
32
server/test/usecase/read_database_model_usecase_test.ts
Normal file
|
@ -0,0 +1,32 @@
|
|||
import { CreateDataBaseModelUseCase } from "../../src/core/usecases/create_database_model_usecase";
|
||||
import { ReadByIdDataBaseModelUseCase } from "../../src/core/usecases/read_database_model_usecase";
|
||||
import { ITestModel, TestDBModel } from "../model/test_db_mongo_model";
|
||||
|
||||
export class ReadDataBaseModelUseCaseTest {
|
||||
async test() {
|
||||
let testIsSuccess = false;
|
||||
|
||||
const result = await new CreateDataBaseModelUseCase<ITestModel>(
|
||||
TestDBModel
|
||||
).call({
|
||||
result: "test",
|
||||
});
|
||||
await result.fold(
|
||||
async (s) => {
|
||||
const r = await new ReadByIdDataBaseModelUseCase<ITestModel>(
|
||||
TestDBModel
|
||||
).call(s.id);
|
||||
await r.fold(
|
||||
(_s1) => {
|
||||
testIsSuccess = true;
|
||||
|
||||
},
|
||||
(_e) => {}
|
||||
);
|
||||
},
|
||||
async (_e) => {}
|
||||
);
|
||||
|
||||
return testIsSuccess;
|
||||
}
|
||||
}
|
35
server/test/usecase/update_database_model_usecase.ts
Normal file
35
server/test/usecase/update_database_model_usecase.ts
Normal file
|
@ -0,0 +1,35 @@
|
|||
import { CreateDataBaseModelUseCase } from "../../src/core/usecases/create_database_model_usecase";
|
||||
import { UpdateDataBaseModelUseCase } from "../../src/core/usecases/update_database_model_usecase";
|
||||
import { ITestModel, TestDBModel } from "../model/test_db_mongo_model";
|
||||
|
||||
export class UpdateDataBaseModelUseCaseTest {
|
||||
async test() {
|
||||
let testIsSuccess = false;
|
||||
|
||||
const model = await new CreateDataBaseModelUseCase<ITestModel>(
|
||||
TestDBModel
|
||||
).call({
|
||||
result: "test",
|
||||
});
|
||||
await model.fold(
|
||||
async (s) => {
|
||||
(
|
||||
await new UpdateDataBaseModelUseCase<any, ITestModel>(
|
||||
TestDBModel
|
||||
).call({
|
||||
_id:s.id,
|
||||
result: "complete",
|
||||
})
|
||||
).fold(
|
||||
(s1) => {
|
||||
testIsSuccess = s1.result === "complete";
|
||||
},
|
||||
(_e1) => {}
|
||||
);
|
||||
},
|
||||
async (_e) => {}
|
||||
);
|
||||
|
||||
return testIsSuccess;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue