Files
privacy.sexy/tests/unit/domain/Collection/Validation/Rules/EnsurePresenceOfAtLeastOneScript.spec.ts
undergroundwires ded55a66d6 Refactor executable IDs to use strings #262
This commit unifies executable ID structure across categories and
scripts, paving the way for more complex ID solutions for #262.
It also refactors related code to adapt to the changes.

Key changes:

- Change numeric IDs to string IDs for categories
- Use named types for string IDs to improve code clarity
- Add unit tests to verify ID uniqueness

Other supporting changes:

- Separate concerns in entities for data access and executables by using
  separate abstractions (`Identifiable` and `RepositoryEntity`)
- Simplify usage and construction of entities.
- Remove `BaseEntity` for simplicity.
- Move creation of categories/scripts to domain layer
- Refactor CategoryCollection for better validation logic isolation
- Rename some categories to keep the names (used as pseudo-IDs) unique
  on Windows.
2024-08-03 16:54:14 +02:00

40 lines
1.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { CategoryCollectionValidationContextStub } from '@tests/unit/shared/Stubs/CategoryCollectionValidationContextStub';
import type { Script } from '@/domain/Executables/Script/Script';
import { ensurePresenceOfAtLeastOneScript } from '@/domain/Collection/Validation/Rules/EnsurePresenceOfAtLeastOneScript';
import { ScriptStub } from '@tests/unit/shared/Stubs/ScriptStub';
describe('ensurePresenceOfAtLeastOneScript', () => {
it('throws an error when no scripts are present', () => {
// arrange
const expectedErrorMessage = 'Collection must have at least one script';
const scripts: Script[] = [];
// act
const act = () => test(scripts);
// assert
expect(act).to.throw(expectedErrorMessage);
});
it('does not throw an error when at least one category is present', () => {
// arrange
const scripts: Script[] = [
new ScriptStub('existing-script'),
];
// act
const act = () => test(scripts);
// assert
expect(act).not.to.throw();
});
});
function test(allScripts: readonly Script[]):
ReturnType<typeof ensurePresenceOfAtLeastOneScript> {
const context = new CategoryCollectionValidationContextStub()
.withAllScripts(allScripts);
return ensurePresenceOfAtLeastOneScript(context);
}