Skip to content
This repository has been archived by the owner on Sep 12, 2023. It is now read-only.

Commit

Permalink
intrn(database): make semester factory
Browse files Browse the repository at this point in the history
  • Loading branch information
Arukane committed Oct 6, 2022
1 parent 2816f1a commit 10fa6f2
Showing 1 changed file with 85 additions and 0 deletions.
85 changes: 85 additions & 0 deletions t/helpers/factories/semester.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { faker } from "@faker-js/faker"

import type { ModelCtor } from "%/types/dependent"
import type { GeneratedData } from "~/types/dependent"
import type {
SemesterResourceIdentifier,
SemesterAttributes,
DeserializedSemesterResource,
DeserializedSemesterDocument,
DeserializedSemesterListDocument,
SemesterResource,
SemesterDocument,
SemesterListDocument
} from "$/types/documents/semester"

import BaseFactory from "~/factories/base"
import Semester from "%/models/semester"
import SemesterTransformer from "%/transformers/semester"
import convertForSentence from "$/string/convert_for_sentence"

export default class SemesterFactory extends BaseFactory<
Semester,
SemesterResourceIdentifier<"read">,
SemesterAttributes<"serialized">,
SemesterAttributes<"deserialized">,
SemesterResource,
DeserializedSemesterResource,
SemesterDocument,
SemesterListDocument,
DeserializedSemesterDocument,
DeserializedSemesterListDocument
> {
nameGenerator = () => `${
convertForSentence(faker.random.alpha(faker.mersenne.rand(10, 5)))
} ${
convertForSentence(faker.random.alpha(faker.mersenne.rand(10, 7)))
}`

#semesterOrder = "first"
#startAtGenerator: () => Date = () => new Date()
#endAtGenerator: () => Date = () => new Date()

get model(): ModelCtor<Semester> { return Semester }

get transformer(): SemesterTransformer { return new SemesterTransformer() }

async generate(): GeneratedData<Semester> {
return {
"name": await this.nameGenerator,
"semesterOrder": await this.#semesterOrder,
"startAt": this.#startAtGenerator(),
"endAt": this.#endAtGenerator()
}
}

name(generator: () => string): SemesterFactory {
this.nameGenerator = generator
return this
}

beFirst(): SemesterFactory {
this.#semesterOrder = "first"
return this
}

beSecond(): SemesterFactory {
this.#semesterOrder = "second"
return this
}

beThird(): SemesterFactory {
this.#semesterOrder = "third"
return this
}

startAt(generator: () => Date): SemesterFactory {
this.#startAtGenerator = generator
return this
}

endAt(generator: () => Date): SemesterFactory {
this.#endAtGenerator = generator
return this
}
}

0 comments on commit 10fa6f2

Please sign in to comment.