From 657d704a08aad85808a28866ddbb3eb1e20d7ef1 Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Wed, 14 Jul 2021 11:16:52 +0300 Subject: [PATCH 01/12] save --- packages/backendv2/package-lock.json | 79 ++++++++++++++++++- packages/backendv2/package.json | 1 + packages/backendv2/src/models/language.ts | 2 + packages/backendv2/src/models/quiz_answer.ts | 26 +++++- packages/backendv2/src/services/plagiarism.ts | 10 +++ 5 files changed, 113 insertions(+), 5 deletions(-) create mode 100644 packages/backendv2/src/services/plagiarism.ts diff --git a/packages/backendv2/package-lock.json b/packages/backendv2/package-lock.json index 3302f5ebe..996596cce 100644 --- a/packages/backendv2/package-lock.json +++ b/packages/backendv2/package-lock.json @@ -5502,6 +5502,11 @@ "minimist": "^1.2.5" } }, + "jsonparse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.0.0.tgz", + "integrity": "sha1-JiL05mwI4arH7b63YFPJt+EhH3Y=" + }, "jsonstream": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/jsonstream/-/jsonstream-1.0.3.tgz", @@ -5509,12 +5514,43 @@ "requires": { "jsonparse": "~1.0.0", "through": ">=2.2.7 <3" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" }, "dependencies": { - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } } } }, @@ -5791,12 +5827,47 @@ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", diff --git a/packages/backendv2/package.json b/packages/backendv2/package.json index 153abe9f6..6d971648d 100644 --- a/packages/backendv2/package.json +++ b/packages/backendv2/package.json @@ -54,6 +54,7 @@ "dotenv": "^8.2.0", "ioredis": "^4.19.4", "jsonstream": "^1.0.3", + "jsonwebtoken": "^8.5.1", "knex": "^0.21.1", "koa": "^2.12.0", "koa-bodyparser": "^4.3.0", diff --git a/packages/backendv2/src/models/language.ts b/packages/backendv2/src/models/language.ts index 7a60b4bee..da6b77ec1 100644 --- a/packages/backendv2/src/models/language.ts +++ b/packages/backendv2/src/models/language.ts @@ -1,6 +1,8 @@ import BaseModel from "./base_model" class Language extends BaseModel { + name!: string + static get tableName() { return "language" } diff --git a/packages/backendv2/src/models/quiz_answer.ts b/packages/backendv2/src/models/quiz_answer.ts index 2a2d5d775..4f2be4c05 100644 --- a/packages/backendv2/src/models/quiz_answer.ts +++ b/packages/backendv2/src/models/quiz_answer.ts @@ -21,6 +21,8 @@ import softDelete from "objection-soft-delete" import { mixin } from "objection" import QuizAnswerStatusModification from "./quiz_answer_status_modification" import { TStatusModificationOperation } from "./../types/index" +import { relayNewAnswer } from "../services/plagiarism" +import Language from "./language" type QuizAnswerStatus = | "draft" @@ -581,6 +583,7 @@ class QuizAnswer extends mixin(BaseModel, [ } await trx.commit() quiz.course = course + await this.relayData(savedQuizAnswer, quiz) return { quiz, quizAnswer: savedQuizAnswer, @@ -592,6 +595,27 @@ class QuizAnswer extends mixin(BaseModel, [ } } + private static async relayData(quizAnswer: QuizAnswer, quiz: Quiz) { + const language = await Language.query().findById(quiz.course.languageId) + for (const quizItem of quiz.items) { + if (quizItem.type === "essay") { + const itemAnswer = quizAnswer.itemAnswers.find( + itemAnswer => itemAnswer.quizItemId === quizItem.id, + ) + if (itemAnswer) { + relayNewAnswer({ + quizId: quiz.id, + quizAnswerId: quizAnswer.id, + quizItemAnswerId: itemAnswer.id, + language: language.name.split(" ")[0].toLowerCase(), + data: itemAnswer.textData, + returnUrl: process.env.RETURN_URL || "" + }) + } + } + } + } + public static async update( quizAnswer: QuizAnswer, userQuizState: UserQuizState, @@ -634,7 +658,7 @@ class QuizAnswer extends mixin(BaseModel, [ } } - private static assessAnswer(quizAnswer: QuizAnswer, quiz: Quiz) { + private static async assessAnswer(quizAnswer: QuizAnswer, quiz: Quiz) { const quizItemAnswers = quizAnswer.itemAnswers const quizItems = quiz.items if (!quizItemAnswers || quizItemAnswers.length === 0) { diff --git a/packages/backendv2/src/services/plagiarism.ts b/packages/backendv2/src/services/plagiarism.ts new file mode 100644 index 000000000..7de376305 --- /dev/null +++ b/packages/backendv2/src/services/plagiarism.ts @@ -0,0 +1,10 @@ +import axios from "axios" +import { QuizAnswer } from "../models" + +export const relayNewAnswer = async (data: any) => { + try { + await axios.post("http://localhost:5150/new", data) + } catch (error) { + console.log(error) + } +} \ No newline at end of file From 34b187ed80a3d9acbd5863013901b71be6cff9e0 Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Wed, 28 Jul 2021 00:20:21 +0300 Subject: [PATCH 02/12] save --- ...714112010_quiz_check_plagiarism_boolean.ts | 11 ++++++++++ packages/backendv2/package-lock.json | 8 +++++++ packages/backendv2/package.json | 1 + .../src/controllers/general/index.ts | 4 ++++ packages/backendv2/src/models/language.ts | 2 +- packages/backendv2/src/models/quiz.ts | 1 + packages/backendv2/src/models/quiz_answer.ts | 5 +++-- packages/backendv2/src/services/plagiarism.ts | 21 ++++++++++++------- 8 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 packages/backendv2/database/migrations/20210714112010_quiz_check_plagiarism_boolean.ts diff --git a/packages/backendv2/database/migrations/20210714112010_quiz_check_plagiarism_boolean.ts b/packages/backendv2/database/migrations/20210714112010_quiz_check_plagiarism_boolean.ts new file mode 100644 index 000000000..ee299f398 --- /dev/null +++ b/packages/backendv2/database/migrations/20210714112010_quiz_check_plagiarism_boolean.ts @@ -0,0 +1,11 @@ +import * as Knex from "knex" + +export async function up(knex: Knex): Promise { + await knex.raw( + `alter table quiz add column check_plagiarism boolean default false;`, + ) +} + +export async function down(knex: Knex): Promise { + await knex.raw(`alter table quiz drop column check_plagiarism;`) +} diff --git a/packages/backendv2/package-lock.json b/packages/backendv2/package-lock.json index 996596cce..3df967854 100644 --- a/packages/backendv2/package-lock.json +++ b/packages/backendv2/package-lock.json @@ -1202,6 +1202,14 @@ "@types/node": "*" } }, + "@types/jsonwebtoken": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.4.tgz", + "integrity": "sha512-4L8msWK31oXwdtC81RmRBAULd0ShnAHjBuKT9MRQpjP0piNrZdXyTRcKY9/UIfhGeKIT4PvF5amOOUbbT/9Wpg==", + "requires": { + "@types/node": "*" + } + }, "@types/keygrip": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", diff --git a/packages/backendv2/package.json b/packages/backendv2/package.json index 6d971648d..1dbb85829 100644 --- a/packages/backendv2/package.json +++ b/packages/backendv2/package.json @@ -46,6 +46,7 @@ "@types/csv-parse": "^1.2.2", "@types/csv-stringify": "^3.1.0", "@types/jsonstream": "^0.8.30", + "@types/jsonwebtoken": "^8.5.4", "@types/lodash": "^4.14.161", "JSONStream": "^1.3.5", "axios": "^0.21.1", diff --git a/packages/backendv2/src/controllers/general/index.ts b/packages/backendv2/src/controllers/general/index.ts index 247a54d28..eafd6e4b4 100644 --- a/packages/backendv2/src/controllers/general/index.ts +++ b/packages/backendv2/src/controllers/general/index.ts @@ -33,4 +33,8 @@ const general = new Router({ ctx.body = quiz_titles }) + .post("/plagiarism", async ctx => { + console.log(ctx.request.body) + }) + export default general diff --git a/packages/backendv2/src/models/language.ts b/packages/backendv2/src/models/language.ts index da6b77ec1..a2cdc9b97 100644 --- a/packages/backendv2/src/models/language.ts +++ b/packages/backendv2/src/models/language.ts @@ -2,7 +2,7 @@ import BaseModel from "./base_model" class Language extends BaseModel { name!: string - + static get tableName() { return "language" } diff --git a/packages/backendv2/src/models/quiz.ts b/packages/backendv2/src/models/quiz.ts index df8c0746a..638cd4818 100644 --- a/packages/backendv2/src/models/quiz.ts +++ b/packages/backendv2/src/models/quiz.ts @@ -35,6 +35,7 @@ export class Quiz extends BaseModel { title!: string body!: string submitMessage!: string + checkPlagiarism!: boolean static get tableName() { return "quiz" diff --git a/packages/backendv2/src/models/quiz_answer.ts b/packages/backendv2/src/models/quiz_answer.ts index 4f2be4c05..f98318206 100644 --- a/packages/backendv2/src/models/quiz_answer.ts +++ b/packages/backendv2/src/models/quiz_answer.ts @@ -583,7 +583,9 @@ class QuizAnswer extends mixin(BaseModel, [ } await trx.commit() quiz.course = course - await this.relayData(savedQuizAnswer, quiz) + if (quiz.checkPlagiarism) { + await this.relayData(savedQuizAnswer, quiz) + } return { quiz, quizAnswer: savedQuizAnswer, @@ -609,7 +611,6 @@ class QuizAnswer extends mixin(BaseModel, [ quizItemAnswerId: itemAnswer.id, language: language.name.split(" ")[0].toLowerCase(), data: itemAnswer.textData, - returnUrl: process.env.RETURN_URL || "" }) } } diff --git a/packages/backendv2/src/services/plagiarism.ts b/packages/backendv2/src/services/plagiarism.ts index 7de376305..4e9b95126 100644 --- a/packages/backendv2/src/services/plagiarism.ts +++ b/packages/backendv2/src/services/plagiarism.ts @@ -1,10 +1,17 @@ import axios from "axios" -import { QuizAnswer } from "../models" +import jwt from "jsonwebtoken" export const relayNewAnswer = async (data: any) => { - try { - await axios.post("http://localhost:5150/new", data) - } catch (error) { - console.log(error) - } -} \ No newline at end of file + try { + await axios.post("http://localhost:5150/new", data, { + headers: { + authorization: jwt.sign( + { source: "quizzes" }, + process.env.JWT_SECRET || "", + ), + }, + }) + } catch (error) { + console.log(error) + } +} From 2025d17d7cf34506a9abf753fb4d0ce3de07431b Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Wed, 29 Sep 2021 11:12:06 +0300 Subject: [PATCH 03/12] - --- packages/backendv2/src/services/plagiarism.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backendv2/src/services/plagiarism.ts b/packages/backendv2/src/services/plagiarism.ts index 4e9b95126..99a5e0f89 100644 --- a/packages/backendv2/src/services/plagiarism.ts +++ b/packages/backendv2/src/services/plagiarism.ts @@ -12,6 +12,6 @@ export const relayNewAnswer = async (data: any) => { }, }) } catch (error) { - console.log(error) + console.log(error.response) } } From 71a54403b405edbd2ef7b665536557daa8820832 Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Thu, 30 Sep 2021 18:45:38 +0300 Subject: [PATCH 04/12] save --- packages/backendv2/src/controllers/general/index.ts | 1 + packages/backendv2/src/services/plagiarism.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/backendv2/src/controllers/general/index.ts b/packages/backendv2/src/controllers/general/index.ts index eafd6e4b4..b2a1f6811 100644 --- a/packages/backendv2/src/controllers/general/index.ts +++ b/packages/backendv2/src/controllers/general/index.ts @@ -35,6 +35,7 @@ const general = new Router({ .post("/plagiarism", async ctx => { console.log(ctx.request.body) + ctx.status = 200 }) export default general diff --git a/packages/backendv2/src/services/plagiarism.ts b/packages/backendv2/src/services/plagiarism.ts index 99a5e0f89..5f7a0efd5 100644 --- a/packages/backendv2/src/services/plagiarism.ts +++ b/packages/backendv2/src/services/plagiarism.ts @@ -1,5 +1,6 @@ import axios from "axios" import jwt from "jsonwebtoken" +import { GlobalLogger } from "../middleware/logger" export const relayNewAnswer = async (data: any) => { try { @@ -12,6 +13,6 @@ export const relayNewAnswer = async (data: any) => { }, }) } catch (error) { - console.log(error.response) + GlobalLogger.error("plagiarism backend responded with error") } } From ee64540274ed20336ae635f95c15ad5f29982f30 Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Thu, 30 Sep 2021 18:53:44 +0300 Subject: [PATCH 05/12] as required by initial plagiarism backend --- ...=> 20210930184939_add_column_check_plagiarism_to_quiz.ts} | 0 packages/backendv2/src/controllers/general/index.ts | 5 ----- 2 files changed, 5 deletions(-) rename packages/backendv2/database/migrations/{20210714112010_quiz_check_plagiarism_boolean.ts => 20210930184939_add_column_check_plagiarism_to_quiz.ts} (100%) diff --git a/packages/backendv2/database/migrations/20210714112010_quiz_check_plagiarism_boolean.ts b/packages/backendv2/database/migrations/20210930184939_add_column_check_plagiarism_to_quiz.ts similarity index 100% rename from packages/backendv2/database/migrations/20210714112010_quiz_check_plagiarism_boolean.ts rename to packages/backendv2/database/migrations/20210930184939_add_column_check_plagiarism_to_quiz.ts diff --git a/packages/backendv2/src/controllers/general/index.ts b/packages/backendv2/src/controllers/general/index.ts index b2a1f6811..247a54d28 100644 --- a/packages/backendv2/src/controllers/general/index.ts +++ b/packages/backendv2/src/controllers/general/index.ts @@ -33,9 +33,4 @@ const general = new Router({ ctx.body = quiz_titles }) - .post("/plagiarism", async ctx => { - console.log(ctx.request.body) - ctx.status = 200 - }) - export default general From 03b76828e250cee380eca0c0d83240159c8a5b8f Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Fri, 1 Oct 2021 18:45:33 +0300 Subject: [PATCH 06/12] timeout csd request --- packages/backendv2/src/services/plagiarism.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/backendv2/src/services/plagiarism.ts b/packages/backendv2/src/services/plagiarism.ts index 5f7a0efd5..23881e002 100644 --- a/packages/backendv2/src/services/plagiarism.ts +++ b/packages/backendv2/src/services/plagiarism.ts @@ -2,17 +2,25 @@ import axios from "axios" import jwt from "jsonwebtoken" import { GlobalLogger } from "../middleware/logger" +const CancelToken = axios.CancelToken +const source = CancelToken.source() + export const relayNewAnswer = async (data: any) => { try { - await axios.post("http://localhost:5150/new", data, { + await axios.post("https://csd.mooc.fi/new", data, { headers: { authorization: jwt.sign( { source: "quizzes" }, process.env.JWT_SECRET || "", ), }, + cancelToken: source.token, }) + setTimeout(() => { + GlobalLogger.warn("plagiarism detection: request timed out") + source.cancel() + }, 10000) } catch (error) { - GlobalLogger.error("plagiarism backend responded with error") + GlobalLogger.error("plagiarism detection: backend responded with error") } } From 553f4147b788c26a648707ba5fe4d388094b1a3c Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Fri, 1 Oct 2021 18:53:13 +0300 Subject: [PATCH 07/12] csd url to environment --- packages/backendv2/src/services/plagiarism.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/backendv2/src/services/plagiarism.ts b/packages/backendv2/src/services/plagiarism.ts index 23881e002..9222c90d2 100644 --- a/packages/backendv2/src/services/plagiarism.ts +++ b/packages/backendv2/src/services/plagiarism.ts @@ -7,7 +7,8 @@ const source = CancelToken.source() export const relayNewAnswer = async (data: any) => { try { - await axios.post("https://csd.mooc.fi/new", data, { + const csd_url = process.env.CSD_URL || "http://localhost/5150" + await axios.post(csd_url, data, { headers: { authorization: jwt.sign( { source: "quizzes" }, From c8c6dffb8857974d51a24cf77eb543f9df674601 Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Fri, 1 Oct 2021 19:00:27 +0300 Subject: [PATCH 08/12] fix url --- packages/backendv2/src/services/plagiarism.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backendv2/src/services/plagiarism.ts b/packages/backendv2/src/services/plagiarism.ts index 9222c90d2..af988ee98 100644 --- a/packages/backendv2/src/services/plagiarism.ts +++ b/packages/backendv2/src/services/plagiarism.ts @@ -8,7 +8,7 @@ const source = CancelToken.source() export const relayNewAnswer = async (data: any) => { try { const csd_url = process.env.CSD_URL || "http://localhost/5150" - await axios.post(csd_url, data, { + await axios.post(csd_url + "/new", data, { headers: { authorization: jwt.sign( { source: "quizzes" }, From cf8ee464700b9195ac36731860a0b0f5947f9fd3 Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Fri, 1 Oct 2021 19:16:55 +0300 Subject: [PATCH 09/12] env variable confs --- kubernetes/backendv2-deployment.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kubernetes/backendv2-deployment.yaml b/kubernetes/backendv2-deployment.yaml index 488349a7f..8c4473f0f 100644 --- a/kubernetes/backendv2-deployment.yaml +++ b/kubernetes/backendv2-deployment.yaml @@ -96,6 +96,16 @@ spec: secretKeyRef: name: backend-database-secret key: SENTRY_DSN + - name: CSD_URL + valueFrom: + secretKeyRef: + name: backend-database-secret + key: CSD_URL + - name: JWT_SECRET + valueFrom: + secretKeyRef: + name: backend-database-secret + key: JWT_SECRET initContainers: - name: quizzes-backendv2-run-migrations image: ${BACKENDV2_IMAGE} From 26820a9f49f11b957a1b2348e4dfaa13af104bc4 Mon Sep 17 00:00:00 2001 From: kalleprkl Date: Fri, 1 Oct 2021 19:17:35 +0300 Subject: [PATCH 10/12] Update packages/backendv2/src/models/quiz_answer.ts Co-authored-by: Henrik Nygren --- packages/backendv2/src/models/quiz_answer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backendv2/src/models/quiz_answer.ts b/packages/backendv2/src/models/quiz_answer.ts index f98318206..429f6a1e8 100644 --- a/packages/backendv2/src/models/quiz_answer.ts +++ b/packages/backendv2/src/models/quiz_answer.ts @@ -597,7 +597,7 @@ class QuizAnswer extends mixin(BaseModel, [ } } - private static async relayData(quizAnswer: QuizAnswer, quiz: Quiz) { + private static async relayPlagiarismData(quizAnswer: QuizAnswer, quiz: Quiz) { const language = await Language.query().findById(quiz.course.languageId) for (const quizItem of quiz.items) { if (quizItem.type === "essay") { From 21f1dbc6f7b0a01e36e9ea21858620aee4bded6c Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Fri, 1 Oct 2021 19:20:53 +0300 Subject: [PATCH 11/12] better name --- packages/backendv2/src/models/quiz_answer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backendv2/src/models/quiz_answer.ts b/packages/backendv2/src/models/quiz_answer.ts index 429f6a1e8..80253df59 100644 --- a/packages/backendv2/src/models/quiz_answer.ts +++ b/packages/backendv2/src/models/quiz_answer.ts @@ -584,7 +584,7 @@ class QuizAnswer extends mixin(BaseModel, [ await trx.commit() quiz.course = course if (quiz.checkPlagiarism) { - await this.relayData(savedQuizAnswer, quiz) + await this.relayPlagiarismData(savedQuizAnswer, quiz) } return { quiz, From 42bf6338a3886413dc7b40252a7901f50b878aad Mon Sep 17 00:00:00 2001 From: Perkoila Kalle M Date: Sat, 2 Oct 2021 15:14:41 +0300 Subject: [PATCH 12/12] fixed some tests --- packages/backendv2/package.json | 2 +- packages/backendv2/src/models/quiz_answer.ts | 2 +- packages/backendv2/tests/data.ts | 13 +++++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/backendv2/package.json b/packages/backendv2/package.json index 1dbb85829..975e19935 100644 --- a/packages/backendv2/package.json +++ b/packages/backendv2/package.json @@ -11,7 +11,7 @@ "dev": "concurrently npm:ts-watch npm:watch", "test": "cross-env NODE_ENV=test && jest --runInBand", "test-open-conn": "cross-env NODE_ENV=test && jest --runInBand --detectOpenHandles ", - "reset-test-db": "cross-env NODE_ENV=test && (dropdb quizzes_test || true) && createdb quizzes_test && knex migrate:latest", + "reset-test-db": "cross-env NODE_ENV=test && (dropdb quizzes_test || true) && createdb quizzes_test && cross-env NODE_ENV=test && knex migrate:latest", "migrate": "knex migrate:latest", "seed": "knex seed:run --specific a.ts", "update-expired-courses": "node ./dist/bin/update-expired-courses.js", diff --git a/packages/backendv2/src/models/quiz_answer.ts b/packages/backendv2/src/models/quiz_answer.ts index 80253df59..5320d3f1d 100644 --- a/packages/backendv2/src/models/quiz_answer.ts +++ b/packages/backendv2/src/models/quiz_answer.ts @@ -659,7 +659,7 @@ class QuizAnswer extends mixin(BaseModel, [ } } - private static async assessAnswer(quizAnswer: QuizAnswer, quiz: Quiz) { + private static assessAnswer(quizAnswer: QuizAnswer, quiz: Quiz) { const quizItemAnswers = quizAnswer.itemAnswers const quizItems = quiz.items if (!quizItemAnswers || quizItemAnswers.length === 0) { diff --git a/packages/backendv2/tests/data.ts b/packages/backendv2/tests/data.ts index 6559da764..50909baa5 100644 --- a/packages/backendv2/tests/data.ts +++ b/packages/backendv2/tests/data.ts @@ -15,6 +15,7 @@ export const input = { awardPointsEvenIfWrong: false, grantPointsPolicy: "grant_whenever_possible", autoReject: true, + checkPlagiarism: false, title: "quiz", body: "body", submitMessage: "nice one!", @@ -86,6 +87,7 @@ export const input = { awardPointsEvenIfWrong: false, grantPointsPolicy: "grant_whenever_possible", autoReject: true, + checkPlagiarism: false, title: "quiz", body: "body", submitMessage: "nice one!", @@ -238,6 +240,8 @@ interface QuizValidator { awardPointsEvenIfWrong: false grantPointsPolicy: "grant_whenever_possible" autoReject: true + + checkPlagiarism: false title: "quiz" body: "body" submitMessage: "nice one!" @@ -261,6 +265,7 @@ export const validation = { awardPointsEvenIfWrong: false, grantPointsPolicy: "grant_whenever_possible", autoReject: true, + checkPlagiarism: false, title: "quiz", body: "body", submitMessage: "nice one!", @@ -375,6 +380,7 @@ export const validation = { awardPointsEvenIfWrong: false, grantPointsPolicy: "grant_whenever_possible", autoReject: true, + checkPlagiarism: false, title: "quiz", body: "body", submitMessage: "nice one!", @@ -475,6 +481,7 @@ export const validation = { awardPointsEvenIfWrong: false, grantPointsPolicy: "grant_whenever_possible", autoReject: true, + checkPlagiarism: false, title: "quiz 1", body: "body", submitMessage: "nice one!", @@ -589,6 +596,7 @@ export const validation = { awardPointsEvenIfWrong: false, grantPointsPolicy: "grant_whenever_possible", autoReject: true, + checkPlagiarism: false, title: "quiz 2", body: "body", submitMessage: "nice one!", @@ -663,6 +671,7 @@ export const validation = { awardPointsEvenIfWrong: false, grantPointsPolicy: "grant_whenever_possible", autoReject: true, + checkPlagiarism: false, title: "quiz", body: "body", submitMessage: "nice one!", @@ -737,6 +746,7 @@ export const validation = { awardPointsEvenIfWrong: false, grantPointsPolicy: "grant_whenever_possible", autoReject: true, + checkPlagiarism: false, title: "quiz", body: "body", submitMessage: "nice one!", @@ -990,6 +1000,7 @@ export const validation = { quiz: { autoConfirm: true, autoReject: true, + checkPlagiarism: false, awardPointsEvenIfWrong: false, courseId: "46d7ceca-e1ed-508b-91b5-3cc8385fa44b", createdAt: expect.stringMatching(dateTime), @@ -1271,6 +1282,7 @@ export const validation = { excludedFromScore: false, autoConfirm: true, autoReject: true, + checkPlagiarism: false, triesLimited: true, tries: 1, grantPointsPolicy: "grant_whenever_possible", @@ -1460,6 +1472,7 @@ export const validation = { excludedFromScore: false, autoConfirm: true, autoReject: true, + checkPlagiarism: false, triesLimited: true, tries: 1, grantPointsPolicy: "grant_whenever_possible",