crud and http controller

This commit is contained in:
IDONTSUDO 2023-10-26 17:44:54 +03:00
parent cba12be4b1
commit c27c061c15
51 changed files with 930 additions and 387 deletions

View file

@ -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,

View file

@ -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

View file

@ -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/";

View file

@ -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>;

View file

@ -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>;
}

View 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);

View file

@ -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();
};

View 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();
}
}

View 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;
}
}

View file

@ -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;
}
}

View 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;
}
}

View 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;
}
}