88 lines
2.6 KiB
TypeScript

import Factory from '@ioc:Adonis/Lucid/Factory';
/**
* Datatypes
*/
import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum';
/**
* Models
*/
import Category from 'App/Models/Category';
import Contact from 'App/Models/Contact';
import Course from 'App/Models/Course';
import Lesson from 'App/Models/Lesson';
import LessonContent from 'App/Models/LessonContent';
import Role from 'App/Models/Role';
import User from 'App/Models/User';
const makeFakeUser = (faker: Faker.FakerStatic, loginPrefix?: string) => {
return {
first_name: faker.name.firstName(),
last_name: faker.name.lastName(),
login: `${loginPrefix || 'user'}${faker.datatype.number(1000)}`,
email: faker.internet.exampleEmail(),
password: '123456',
};
};
export const ContactFactory = Factory.define(Contact, ({ faker }) => {
return {
phone_number: faker.phone.phoneNumber(),
};
}).build();
export const UserFactory = Factory.define(User, ({ faker }) => makeFakeUser(faker))
.relation('contacts', () => ContactFactory)
.build();
export const TeacherFactory = Factory.define(User, ({ faker }) => makeFakeUser(faker, 'teacher'))
.relation('contacts', () => ContactFactory)
.after('create', async (_, user: User) => {
const role = await Role.findByOrFail('slug', 'teacher');
await user.related('roles').attach([role.id]);
})
.build();
export const StudentFactory = Factory.define(User, ({ faker }) => makeFakeUser(faker, 'student'))
.relation('contacts', () => ContactFactory)
.after('create', async (_, user: User) => {
const role = await Role.findByOrFail('slug', 'student');
await user.related('roles').attach([role.id]);
})
.build();
export const LessonContentFactory = Factory.define(LessonContent, ({ faker }) => {
return {
video_url: `https://www.youtube.com/embed/${faker.datatype.string(10)}`,
};
}).build();
export const LessonFactory = Factory.define(Lesson, ({ faker }) => {
return {
title: `Lesson #${faker.datatype.number(200)}`,
description: faker.lorem.sentence(5),
};
})
.relation('content', () => LessonContentFactory)
.build();
export const CategoryFactory = Factory.define(Category, ({ faker }) => {
return {
title: `Category #${faker.datatype.number(200)}`,
description: faker.lorem.sentence(5),
};
}).build();
export const CourseFactory = Factory.define(Course, ({ faker }) => {
return {
title: `Course #${faker.datatype.number(200)}`,
description: faker.lorem.sentence(5),
status: CourseStatusEnum.PUBLISHED,
};
})
.relation('category', () => CategoryFactory)
.relation('lessons', () => LessonFactory)
.relation('teacher', () => TeacherFactory)
.build();