Skip to content
Snippets Groups Projects
Commit 7509a808 authored by robinwilliam.hundt's avatar robinwilliam.hundt
Browse files

Added factory-boy dependency and started writing more e2e test

parent 8771b1f9
No related branches found
No related tags found
1 merge request!128Merge improve testing
<template> <template>
<v-card class="py-2"> <v-card class="py-2" id="correction-statistics">
<v-card-title> <v-card-title>
<span class="title">Statistics</span> <span class="title">Statistics</span>
</v-card-title> </v-card-title>
......
import os
import time
from django.test import LiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.options import Options
from core.models import UserAccount
from functional_tests.util import get_frontend_url, login, create_browser
from util.factories import make_test_data
from util import factory_boys as fact
LiveServerTestCase.port = int(os.environ.get('LIVE_SERVER_PORT', 0))
class FrontPageTestsTutorReviewer:
def _login(self):
login(self.browser, self.live_server_url, self.username, self.password)
def test_statistics_are_shown(self):
self._login()
statistics = self.browser.find_element_by_id('correction-statistics')
class FrontPageTestsTutor(LiveServerTestCase, FrontPageTestsTutorReviewer):
def setUp(self):
self.live_server_url = get_frontend_url(self.live_server_url)
self.browser = create_browser()
self.username = 'tutor'
self.password = 'p'
fact.UserAccountFactory(username=self.username, password=self.password)
def tearDown(self):
self.browser.quit()
class FrontPageTestsReviewer(LiveServerTestCase, FrontPageTestsTutorReviewer):
def setUp(self):
self.live_server_url = get_frontend_url(self.live_server_url)
self.browser = create_browser()
self.username = 'reviewer'
self.password = 'p'
fact.UserAccountFactory(username=self.username, password=self.password)
def tearDown(self):
self.browser.quit()
import os import os
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.options import Options
def get_frontend_url(live_server_url): def get_frontend_url(live_server_url):
return os.environ.get('FRONTEND_URL', live_server_url) return os.environ.get('FRONTEND_URL', live_server_url)
def create_browser():
options = Options()
options.headless = bool(os.environ.get('HEADLESS_TESTS', False))
browser = webdriver.Firefox(options=options)
browser.implicitly_wait(5)
return browser
def login(browser, live_server_url, username, password='p'):
browser.get(live_server_url)
username_input = browser.find_element_by_xpath('//input[@aria-label="Username"]')
username_input.send_keys(username)
password_input = browser.find_element_by_xpath('//input[@aria-label="Password"]')
password_input.send_keys(password)
browser.find_element_by_xpath('//button[@type="submit"]').send_keys(Keys.ENTER)
time.sleep(1)
...@@ -3,3 +3,5 @@ pre-commit~=1.4.1 ...@@ -3,3 +3,5 @@ pre-commit~=1.4.1
pytest-cov~=2.5.1 pytest-cov~=2.5.1
pytest-django~=3.1.2 pytest-django~=3.1.2
selenium~=3.14.1 selenium~=3.14.1
factory-boy~=2.11.1
Faker~=0.9.2
import factory
from factory.django import DjangoModelFactory
from faker import Faker
from core import models
fake = Faker()
fake.seed(42)
class ExamTypeFactory(DjangoModelFactory):
class Meta:
model = models.ExamType
module_reference = 'B.Inf.4242 Test Module'
total_score = 90
pass_score = 45
pass_only = False
class SubmissionTypeFactory(DjangoModelFactory):
class Meta:
model = models.SubmissionType
name = factory.Sequence(lambda n: f"[${n}] Example submission type ")
full_score = 15
description = '<h1>This</h1> is a <b>description</b> containing html'
solution = 'This usually contains commented code'
programming_language = models.SubmissionType.C
class UserAccountFactory(DjangoModelFactory):
class Meta:
model = models.UserAccount
role = models.UserAccount.REVIEWER
fullname = fake.name()
username = fake.user_name()
password = factory.PostGenerationMethodCall('set_password', 'p')
class StudentInfoFactory(DjangoModelFactory):
class Meta:
model = models.StudentInfo
exam = factory.SubFactory(ExamTypeFactory)
user = factory.SubFactory(UserAccountFactory)
class TestFactory(DjangoModelFactory):
class Meta:
model = models.Test
name = 'EmptyTest'
label = 'Epmty'
annotation = 'This is an annotation'
class SubmissionFactory(DjangoModelFactory):
class Meta:
model = models.Submission
text = """#include<stdio.h>
int main() {
printf("Hello World\n");
return 0;
}
"""
type = factory.SubFactory(SubmissionTypeFactory)
student = factory.SubFactory(StudentInfoFactory)
class FeedbackFactory(DjangoModelFactory):
class Meta:
model = models.Feedback
of_submission = factory.SubFactory(SubmissionTypeFactory)
class FeedbackCommentFactory(DjangoModelFactory):
class Meta:
model = models.FeedbackComment
text = 'Well, this is bad...'
of_tutor = factory.SubFactory(UserAccountFactory)
of_feedback = factory.SubFactory(FeedbackFactory)
class SubmissionSubscriptionFactory(DjangoModelFactory):
class Meta:
model = models.SubmissionSubscription
owner = factory.SubFactory(UserAccountFactory)
class TutorSubmissionAssignmentFactory(DjangoModelFactory):
class Meta:
model = models.TutorSubmissionAssignment
submission = factory.SubFactory(SubmissionFactory)
subscription = factory.SubFactory(SubmissionSubscriptionFactory)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment