From d419685640eb1fe14fd300a17a134f1a0902f48a Mon Sep 17 00:00:00 2001 From: Dominik Seeger <dominik.seeger@gmx.net> Date: Wed, 6 Mar 2019 14:48:52 +0100 Subject: [PATCH] refactor to class component, also poll available submissions regulary corrected test --- .../subscriptions/SubscriptionList.vue | 85 +++++++++++-------- functional_tests/test_feedback_creation.py | 3 +- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/frontend/src/components/subscriptions/SubscriptionList.vue b/frontend/src/components/subscriptions/SubscriptionList.vue index fcdf863c..74f4383b 100644 --- a/frontend/src/components/subscriptions/SubscriptionList.vue +++ b/frontend/src/components/subscriptions/SubscriptionList.vue @@ -6,7 +6,7 @@ Tasks </v-toolbar-title> <v-spacer/> - <v-btn icon @click="getSubscriptions"> + <v-btn icon @click="getSubscriptions(false)"> <v-icon v-if="!updating">refresh</v-icon> <v-progress-circular v-else @@ -27,54 +27,65 @@ </v-card> </template> -<script> +<script lang="ts"> +import Vue from 'vue' +import Component from 'vue-class-component' +import { Prop } from 'vue-property-decorator' import { mapGetters, mapActions, mapState } from 'vuex' import { UI } from '@/store/modules/ui' import { actions } from '@/store/actions' -import SubscriptionCreation from '@/components/subscriptions/SubscriptionCreation' -import SubscriptionForList from '@/components/subscriptions/SubscriptionForList' -import SubscriptionsForStage from '@/components/subscriptions/SubscriptionsForStage' +import SubscriptionCreation from '@/components/subscriptions/SubscriptionCreation.vue' +import SubscriptionForList from '@/components/subscriptions/SubscriptionForList.vue' +import SubscriptionsForStage from '@/components/subscriptions/SubscriptionsForStage.vue' import { Subscriptions } from '@/store/modules/subscriptions' -export default { +@Component({ + name: 'subscription-list', components: { SubscriptionsForStage, SubscriptionForList, - SubscriptionCreation }, - name: 'subscription-list', - props: { - sidebar: { - type: Boolean, - default: false - } - }, - data () { - return { - selectedStage: null, - updating: false - } + SubscriptionCreation }, - computed: { - subscriptions () { return Subscriptions.state.subscriptions }, - stages () { return Subscriptions.availableStages }, - stagesReadable () { return Subscriptions.availableStagesReadable }, - showDetail () { - return !this.sidebar || (this.sidebar && !UI.state.sideBarCollapsed) - } - }, - methods: { - async getSubscriptions () { +}) +export default class SubscriptionList extends Vue { + @Prop({type: Boolean, required: true, default: false}) sidebar!: boolean + + selectedStage = null + updating = false + timer = 0 + + get subscriptions () { return Subscriptions.state.subscriptions } + get stages () { return Subscriptions.availableStages } + get stagesReadable () { return Subscriptions.availableStagesReadable } + get showDetail () { + return !this.sidebar || (this.sidebar && !UI.state.sideBarCollapsed) + } + + async getSubscriptions (silent: boolean) { + if (silent === false) { this.updating = true - const subscriptions = await Subscriptions.getSubscriptions() - this.updating = false - return subscriptions } - }, - created () { - const typesAndSubscriptions = [actions.updateSubmissionTypes(), Subscriptions.getSubscriptions()] - Promise.all(typesAndSubscriptions).then(() => { + const subscriptions = await Subscriptions.getSubscriptions() + this.updating = false + return subscriptions + } + + mounted() { + this.timer = setInterval(() => { + this.getSubscriptions(true) + }, 30 * 1e3) + } + + beforeDestroy() { + clearInterval(this.timer) + } + + created() { + const submissionTypes = actions.updateSubmissionTypes() + const subscriptions = Subscriptions.getSubscriptions() + Promise.all([submissionTypes, subscriptions]).then(() => { Subscriptions.subscribeToAll() - Subscriptions.cleanAssignmentsFromSubscriptions() + Subscriptions.cleanAssignmentsFromSubscriptions(undefined) }) } } diff --git a/functional_tests/test_feedback_creation.py b/functional_tests/test_feedback_creation.py index f34e2e5f..bc40155d 100644 --- a/functional_tests/test_feedback_creation.py +++ b/functional_tests/test_feedback_creation.py @@ -227,7 +227,8 @@ class UntestedParent: self.write_comments_on_lines([(0, 'I disagree'), (1, 'Full points!')]) self.browser.find_element_by_id('score-full').click() self.browser.find_element_by_id('submit-feedback').click() - WebDriverWait(self.browser, 10).until(ec.url_contains('subscription/ended')) + sub_url = 'subscription/' + str(self.sub_type.pk) + '/ended' + WebDriverWait(self.browser, 10).until(ec.url_contains(sub_url)) submission_for_code = Submission.objects.get(text=code) self.assertEqual(self.sub_type.full_score, submission_for_code.feedback.score) self.assertEqual(3, submission_for_code.feedback.feedback_lines.count()) -- GitLab