From 989ccf0c87ef6d0bcc361dd85fa8070a15ad1b61 Mon Sep 17 00:00:00 2001 From: Kir_Antipov Date: Fri, 24 Feb 2023 05:23:13 +0000 Subject: [PATCH] Made `DependencyType` enum --- src/dependencies/dependency-type.ts | 63 +++++++++++++++++++ .../unit/dependencies/dependency-type.spec.ts | 29 +++++++++ 2 files changed, 92 insertions(+) create mode 100644 src/dependencies/dependency-type.ts create mode 100644 tests/unit/dependencies/dependency-type.spec.ts diff --git a/src/dependencies/dependency-type.ts b/src/dependencies/dependency-type.ts new file mode 100644 index 0000000..6952d1d --- /dev/null +++ b/src/dependencies/dependency-type.ts @@ -0,0 +1,63 @@ +import { Enum, EnumOptions } from "@/utils/enum"; + +/** + * Represents different dependency types. + * + * @partial + */ +enum DependencyTypeValues { + /** + * The dependency is required for the project to function. + */ + REQUIRED = "required", + + /** + * The dependency is recommended for the project but not required. + */ + RECOMMENDED = "recommended", + + /** + * The dependency is embedded within the project. + */ + EMBEDDED = "embedded", + + /** + * The dependency is optional and provides additional features. + */ + OPTIONAL = "optional", + + /** + * The dependency conflicts with the project and both should not be used together. + */ + CONFLICTING = "conflicting", + + /** + * The dependency is incompatible with the project. + */ + INCOMPATIBLE = "incompatible", +} + +/** + * Options for configuring the behavior of the DependencyType enum. + * + * @partial + */ +const DependencyTypeOptions: EnumOptions = { + /** + * The case should be ignored while parsing the dependency type. + */ + ignoreCase: true, +}; + +/** + * Represents different dependency types. + */ +export const DependencyType = Enum.create( + DependencyTypeValues, + DependencyTypeOptions, +); + +/** + * Represents different dependency types. + */ +export type DependencyType = Enum; diff --git a/tests/unit/dependencies/dependency-type.spec.ts b/tests/unit/dependencies/dependency-type.spec.ts new file mode 100644 index 0000000..d25be4d --- /dev/null +++ b/tests/unit/dependencies/dependency-type.spec.ts @@ -0,0 +1,29 @@ +import { DependencyType } from "@/dependencies/dependency-type"; + +describe("DependencyType", () => { + describe("parse", () => { + test("parses all its own formatted values", () => { + for (const value of DependencyType.values()) { + expect(DependencyType.parse(DependencyType.format(value))).toBe(value); + } + }); + + test("parses all friendly names of its own values", () => { + for (const value of DependencyType.values()) { + expect(DependencyType.parse(DependencyType.friendlyNameOf(value))).toBe(value); + } + }); + + test("parses all its own formatted values in lowercase", () => { + for (const value of DependencyType.values()) { + expect(DependencyType.parse(DependencyType.format(value).toLowerCase())).toBe(value); + } + }); + + test("parses all its own formatted values in UPPERCASE", () => { + for (const value of DependencyType.values()) { + expect(DependencyType.parse(DependencyType.format(value).toUpperCase())).toBe(value); + } + }); + }); +});