The project's slagon has been updated back to "Privacy is sexy" from "Now you have the choice" for enhanced brand clarity and memorability. This change also reflects the community's preference and aligns with the project's established identity. This commit also refactors naming and structure of project information (metadata) struct to enhance clarity and maintainability in relation to changing the slogan. Key changes include: - Update UI components to display the revised slogan. - Remove period from project slogan in code area for consistency with a explanatory comment for future maintainability. - Refactor header container and class names for clarity. - Standardize project metadata usage in `TheCodeArea.vue` to ensure consistency. - Improve code clarity by renaming `IProjectInformation` to `ProjectDetails` and `ProjectInformation` to `GitHubProjectDetails`. - Organize `ProjectDetails` under a dedicated `Project` directory within the domain layer for better structure. These changes are expected to improve the project's appeal and streamline future maintenance and development efforts.
92 lines
3.1 KiB
TypeScript
92 lines
3.1 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { CodeSubstituter } from '@/application/Parser/ScriptingDefinition/CodeSubstituter';
|
|
import { IExpressionsCompiler } from '@/application/Parser/Script/Compiler/Expressions/IExpressionsCompiler';
|
|
import { ProjectDetailsStub } from '@tests/unit/shared/Stubs/ProjectDetailsStub';
|
|
import { ExpressionsCompilerStub } from '@tests/unit/shared/Stubs/ExpressionsCompilerStub';
|
|
import { itEachAbsentStringValue } from '@tests/unit/shared/TestCases/AbsentTests';
|
|
|
|
describe('CodeSubstituter', () => {
|
|
describe('throws if code is empty', () => {
|
|
itEachAbsentStringValue((emptyCode) => {
|
|
// arrange
|
|
const expectedError = 'missing code';
|
|
const code = emptyCode;
|
|
const projectDetails = new ProjectDetailsStub();
|
|
const sut = new CodeSubstituterBuilder().build();
|
|
// act
|
|
const act = () => sut.substitute(code, projectDetails);
|
|
// assert
|
|
expect(act).to.throw(expectedError);
|
|
}, { excludeNull: true, excludeUndefined: true });
|
|
});
|
|
describe('substitutes parameters as expected values', () => {
|
|
// arrange
|
|
const projectDetails = new ProjectDetailsStub();
|
|
const date = new Date();
|
|
const testCases: Array<{ parameter: string, argument: string }> = [
|
|
{
|
|
parameter: 'homepage',
|
|
argument: projectDetails.homepage,
|
|
},
|
|
{
|
|
parameter: 'version',
|
|
argument: projectDetails.version.toString(),
|
|
},
|
|
{
|
|
parameter: 'date',
|
|
argument: date.toUTCString(),
|
|
},
|
|
];
|
|
for (const testCase of testCases) {
|
|
it(`substitutes ${testCase.parameter} as expected`, () => {
|
|
const compilerStub = new ExpressionsCompilerStub();
|
|
const sut = new CodeSubstituterBuilder()
|
|
.withCompiler(compilerStub)
|
|
.withDate(date)
|
|
.build();
|
|
// act
|
|
sut.substitute('non empty code', projectDetails);
|
|
// assert
|
|
expect(compilerStub.callHistory).to.have.lengthOf(1);
|
|
const parameters = compilerStub.callHistory[0].args[1];
|
|
expect(parameters.hasArgument(testCase.parameter));
|
|
const { argumentValue } = parameters.getArgument(testCase.parameter);
|
|
expect(argumentValue).to.equal(testCase.argument);
|
|
});
|
|
}
|
|
});
|
|
it('returns code as it is', () => {
|
|
// arrange
|
|
const expected = 'expected-code';
|
|
const compilerStub = new ExpressionsCompilerStub();
|
|
const sut = new CodeSubstituterBuilder()
|
|
.withCompiler(compilerStub)
|
|
.build();
|
|
// act
|
|
sut.substitute(expected, new ProjectDetailsStub());
|
|
// assert
|
|
expect(compilerStub.callHistory).to.have.lengthOf(1);
|
|
expect(compilerStub.callHistory[0].args[0]).to.equal(expected);
|
|
});
|
|
});
|
|
|
|
class CodeSubstituterBuilder {
|
|
private compiler: IExpressionsCompiler = new ExpressionsCompilerStub();
|
|
|
|
private date = new Date();
|
|
|
|
public withCompiler(compiler: IExpressionsCompiler) {
|
|
this.compiler = compiler;
|
|
return this;
|
|
}
|
|
|
|
public withDate(date: Date) {
|
|
this.date = date;
|
|
return this;
|
|
}
|
|
|
|
public build() {
|
|
return new CodeSubstituter(this.compiler, this.date);
|
|
}
|
|
}
|