diff --git a/client/src/components/circle/DocumentListItem.vue b/client/src/components/circle/DocumentListItem.vue
index b11f8327..212fa10a 100644
--- a/client/src/components/circle/DocumentListItem.vue
+++ b/client/src/components/circle/DocumentListItem.vue
@@ -8,7 +8,12 @@
{{ subtitle }}
-
+
diff --git a/client/src/pages/cockpit/documentPage/DocumentPage.vue b/client/src/pages/cockpit/documentPage/DocumentPage.vue
index ad3c1a9d..de48a353 100644
--- a/client/src/pages/cockpit/documentPage/DocumentPage.vue
+++ b/client/src/pages/cockpit/documentPage/DocumentPage.vue
@@ -83,6 +83,8 @@ const canEditDocuments = computed(() => {
const circleExperts = courseSessionDetailResult.filterCircleExperts(
cockpitStore.currentCircle?.slug || ""
);
+ // hack-ish way to check if the user is an expert for the circle
+ // supervistors are not allowd to edit documents if they are not experts in the circle
return circleExperts.some(
(expert) =>
expert.user_id === userStore.id &&
@@ -157,6 +159,7 @@ async function uploadDocument(data: DocumentUploadData) {
{{ t("circlePage.documents.action") }}
diff --git a/client/src/pages/learningPath/circlePage/DocumentSection.vue b/client/src/pages/learningPath/circlePage/DocumentSection.vue
index 8f41ec66..10907cd0 100644
--- a/client/src/pages/learningPath/circlePage/DocumentSection.vue
+++ b/client/src/pages/learningPath/circlePage/DocumentSection.vue
@@ -8,7 +8,11 @@
{{ $t("circlePage.documents.userDescription") }}
-
+
{
+ beforeEach(() => {
+ cy.manageCommand("cypress_reset");
+ });
+
+ describe("Cockpit Document list", () => {
+ it("Trainer sees document mutation buttons", () => {
+ login("test-trainer1@example.com", "test");
+ cy.visit("/course/test-lehrgang/cockpit/documents");
+
+ cy.get('[data-cy="document-upload-button"]').should("exist");
+ cy.get('[data-cy="document-delete-button"]').should("exist");
+ });
+
+ it("Supervisor does not see document mutation buttons", () => {
+ login("test-supervisor1@example.com", "test");
+ cy.visit("/course/test-lehrgang/cockpit/documents");
+
+ cy.get('[data-cy="document-upload-button"]').should("not.exist");
+ cy.get('[data-cy="document-delete-button"]').should("not.exist");
+ });
+ });
+
+ describe("Preview", () => {
+ it("Supervisor sees documents list", () => {
+ login("test-supervisor1@example.com", "test");
+ cy.visit("/course/test-lehrgang/learn/fahrzeug");
+
+ cy.get('[data-cy="circle-page-documents"]').should("exist");
+ });
+
+ it("Berufsbildner sees document list", () => {
+ login("test-berufsbildner1@example.com", "test");
+ cy.visit("/course/test-lehrgang/learn/fahrzeug");
+
+ cy.get('[data-cy="circle-page-documents"]').should("exist");
+ });
+ });
+});
diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py
index 81f28c53..ebdd4f9e 100644
--- a/server/vbv_lernwelt/course/creators/test_course.py
+++ b/server/vbv_lernwelt/course/creators/test_course.py
@@ -2,6 +2,7 @@ from collections import deque
from datetime import datetime
from dateutil.relativedelta import MO, TH, TU, WE, relativedelta
+from django.core.files.uploadedfile import SimpleUploadedFile
from django.utils import timezone
from slugify import slugify
from wagtail.rich_text import RichText
@@ -48,6 +49,7 @@ from vbv_lernwelt.core.utils import safe_deque_popleft
from vbv_lernwelt.course.consts import COURSE_TEST_ID
from vbv_lernwelt.course.factories import CoursePageFactory
from vbv_lernwelt.course.models import (
+ CircleDocument,
Course,
CourseCategory,
CourseConfiguration,
@@ -63,12 +65,14 @@ from vbv_lernwelt.course_session.models import (
)
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
from vbv_lernwelt.feedback.services import update_feedback_response
+from vbv_lernwelt.files.models import UploadFile
from vbv_lernwelt.learning_mentor.models import AgentParticipantRelation
from vbv_lernwelt.learnpath.models import (
Circle,
LearningContentAssignment,
LearningContentAttendanceCourse,
LearningContentEdoniqTest,
+ LearningSequence,
)
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
CircleFactory,
@@ -187,6 +191,27 @@ def create_test_course(
)
csac.due_date.save()
+ # create fake doc (will be uploaded to aws)
+ ls = LearningSequence.objects.get(
+ title="Vorbereitung",
+ slug="test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung",
+ )
+ fake_file = SimpleUploadedFile(
+ "fake_file.txt", b"file_content_here", content_type="text/plain"
+ )
+ pseudo_file = UploadFile.objects.create(
+ file=fake_file,
+ original_file_name="Test Dokument",
+ file_name="Test Dokument",
+ file_type="txt",
+ )
+ CircleDocument.objects.create(
+ file=pseudo_file,
+ name="Test Dokument)",
+ course_session=cs_bern,
+ learning_sequence=ls,
+ )
+
if include_vv:
csac = CourseSessionAttendanceCourse.objects.create(
course_session=cs_bern,