| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- const { randomArrayValue } = require('./utils')
- // basic types
- const basicExtendsTypes = () => ({
- LOCAL_DATE_TIME: () => Math.floor(new Date().getTime() / 1000),
- USER_ROLE: (role) => role || randomArrayValue(['STUDENT', 'TEACHER']),
- BUILD_STATUS: (status) =>
- status ||
- randomArrayValue([
- 'SUCCESS',
- 'UNSTABLE',
- 'FAILURE',
- 'TIMEOUT',
- 'WAITING',
- 'RUNNING'
- ]),
- PROBLEM_TYPE: (problemType) =>
- problemType ||
- randomArrayValue([
- 'JAVA',
- 'JAVA_DATABASE',
- 'PYTHON',
- 'JAVA_COVERAGE',
- 'PYTHON_COVERAGE',
- 'JAVA_MUTATION'
- ]),
- EXAM_STATUS: (examStatus) =>
- examStatus ||
- randomArrayValue([
- 'PREPARING',
- 'UNAVAILABLE',
- 'READY',
- 'AVAILABLE',
- 'FINISHED',
- 'CLOSED'
- ])
- })
- // serializer type
- const serializersPlugin = (mock) => ({
- USER_SERIALIZER: (role, id) =>
- mock({
- [isNaN(id) ? 'id|1-2000' : 'id']: isNaN(id) ? 1 : id,
- 'score|90-100': 1,
- username: '@NAME',
- name: '@NAME',
- email: '@EMAIL',
- phone: '@PHONE',
- role: `@USER_ROLE(${role})`,
- createdAt: '@LOCAL_DATE_TIME'
- }),
- RESULT_SERIALIZER: (deleted) =>
- mock({
- 'id|1-1000': 1,
- 'score|90-100': 1,
- lastCommitAt: '@LOCAL_DATE_TIME',
- deleted: typeof deleted === 'boolean' ? deleted : '@BOOLEAN',
- exam: {
- 'id|1-1000': 1,
- name: '@NAME',
- course: '南京大学软件工程第一期'
- },
- owner: {
- 'id|1-1000': 1,
- username: '@NAME'
- },
- 'commits|10-20': [
- {
- 'id|1-1000': 1,
- finished: '@BOOLEAN',
- 'score|90-100': 1,
- createdAt: '@LOCAL_DATE_TIME'
- }
- ]
- }),
- RECORD_SERIALIZER: (status) =>
- mock({
- 'id|1-1000': 1,
- 'number|1-1000': 1,
- status: `@BUILD_STATUS(${status})`,
- consoleOutput: '@PARAGRAPH(1)',
- 'score|90-100': 1,
- commit: {
- 'id|1-1000': 1,
- finished: '@BOOLEAN',
- 'score|90-100': 1,
- createdAt: '@LOCAL_DATE_TIME'
- },
- 'failures|10-20': [
- {
- name: '@TITLE',
- details: '@SENTENCE',
- trace: '@PARAGRAPH(1)'
- }
- ]
- }),
- PROBLEM_SERIALIZER: (type) =>
- mock({
- 'id|1-1000': 1,
- name: '@NAME',
- type: `@PROBLEM_TYPE(${type})`,
- description: '@SENTENCE',
- 'publicFiles|0-4': ['@URL'],
- 'protectedFiles|0-4': ['@URL'],
- 'privateFiles|0-4': ['@URL'],
- createdAt: '@LOCAL_DATE_TIME',
- modifiedAt: '@LOCAL_DATE_TIME',
- deprecated: '@BOOLEAN',
- creator: {
- 'id|1-1000': 1,
- username: '@NAME'
- }
- }),
- PAGE_SERIALIZER: () => ({
- page: 1,
- limit: 20,
- size: 20,
- total: 100
- }),
- EXAM_SERIALIZER: (status) =>
- mock({
- 'id|1-1000': 1,
- name: '@NAME',
- createdAt: '1578405025',
- startAt: '1578405025',
- endAt: '1588405025',
- url: '@URL',
- status: `@EXAM_STATUS(${status})`,
- creator: {
- 'id|1-1000': 1,
- username: '@NAME'
- },
- joined: '@BOOLEAN',
- 'courseId|1-1000': 1,
- courseName: '南京大学软件工程第一期'
- }),
- COURSE_SERIALIZER: () =>
- mock({
- 'id|1-1000': 1,
- name: '南京大学软件工程第一期',
- code: '@ID'
- }),
- CODE_SERIALIZER: () =>
- mock({
- 'examId|1-1000': 1,
- fetchAt: '@LOCAL_DATE_TIME',
- startAt: '@LOCAL_DATE_TIME',
- endAt: '@LOCAL_DATE_TIME',
- 'codeList|10-100': [
- {
- 'questionId|1-1000': 1,
- language: 'Java',
- projectName: '软工一作业',
- editable: {
- '/a/b/c.java': btoa(`class a{
- public void helloWorld1(){
- }
- }`),
- '/a/b/a.java': btoa(`class a{
- public void helloWorld2(){
- }
- }`),
- '/a/c/a.java': btoa(`class a{
- public void helloWorld3(){
- }
- }`),
- '/a/b/d.java': btoa(`class a{
- public void helloWorld4(){
- }
- }`)
- },
- uneditable: {
- '/README.md': btoa('')
- }
- }
- ]
- }),
- COMMIT_SERIALIZER: () =>
- mock({
- 'id|1-1000': 1,
- hash: '@STRING(50)',
- finished: '@BOOLEAN',
- 'score|70-100': 1,
- createdAt: '@LOCAL_DATE_TIME',
- result: {
- 'id|1-1000': 1,
- 'score|70-100': 1,
- exam: {
- 'id|1-1000': 1,
- name: '@SENTENCE'
- },
- owner: {
- 'id|1-1000': 1,
- username: '@NAME'
- }
- },
- 'records|10': [
- {
- 'id|1-1000': 1,
- status: '@BUILD_STATUS',
- 'score|70-100': 1,
- problem: {
- 'id|1-1000': 1,
- name: '@SENTENCE'
- }
- }
- ]
- })
- })
- function btoa(str) {
- if (Buffer.byteLength(str) !== str.length) throw new Error('bad string!')
- return Buffer.from(str, 'binary').toString('base64')
- }
- module.exports = function(random, mock) {
- random.extend(basicExtendsTypes())
- random.extend(serializersPlugin(mock))
- }
|