Skip to content

Commit c7f5da0

Browse files
authored
[MBL-19126][Student][Parent] Assignment Details DCP
refs: MBL-19126 affects: Student, Parent release note: Details page of assignments with discussion checkpoints now shown with proper data.
1 parent ec04e78 commit c7f5da0

File tree

63 files changed

+8124
-212
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+8124
-212
lines changed

apps/buildSrc/src/main/java/GlobalDependencies.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ object Versions {
4545
const val ENCRYPTED_SHARED_PREFERENCES = "1.0.0"
4646
const val JAVA_JWT = "4.5.0"
4747
const val GLANCE = "1.1.1"
48+
const val LIVEDATA = "1.9.0"
4849
}
4950

5051
object Libs {
@@ -131,7 +132,6 @@ object Libs {
131132
const val LIFECYCLE_COMPILER = "androidx.lifecycle:lifecycle-compiler:${Versions.LIFECYCLE}"
132133
const val COMPOSE_VIEW_MODEL = "androidx.lifecycle:lifecycle-viewmodel-compose:${Versions.LIFECYCLE}"
133134
const val COMPOSE_NAVIGATION = "androidx.navigation:navigation-compose:2.8.9"
134-
135135
/* Media and content handling */
136136
const val PSPDFKIT = "com.pspdfkit:pspdfkit:${Versions.PSPDFKIT}"
137137
const val MEDIA3 = "androidx.media3:media3-exoplayer:${Versions.MEDIA3}"

apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class AssignmentReminderE2ETest: ParentComposeTest() {
141141
Log.d(STEP_TAG, "Click on the '+' button (Add reminder) to pick up a new reminder.")
142142
assignmentReminderPage.clickAddReminder()
143143

144-
val reminderDateOneDay = futureDueDate.apply { add(Calendar.DAY_OF_MONTH, -1) }
144+
val reminderDateOneDay = futureDueDate.apply { add(Calendar.DAY_OF_MONTH, -1) }.apply { add(Calendar.HOUR, -1) }
145145
Log.d(STEP_TAG, "Select '1 Day Before'.")
146146
assignmentReminderPage.clickCustomReminderOption()
147147
assignmentReminderPage.selectDate(reminderDateOneDay)

apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
4040
import com.instructure.canvasapi2.models.AlertType
4141
import com.instructure.canvasapi2.models.AlertWorkflowState
4242
import com.instructure.canvasapi2.models.Assignment
43+
import com.instructure.canvasapi2.models.Checkpoint
4344
import com.instructure.canvasapi2.models.CourseSettings
4445
import com.instructure.canvasapi2.utils.toApiString
4546
import com.instructure.pandautils.utils.toFormattedString
@@ -104,7 +105,7 @@ class AssignmentDetailsInteractionTest : ParentComposeTest() {
104105
fun testDisplayDueDate() {
105106
val data = setupData()
106107
val calendar = Calendar.getInstance().apply { set(2023, 0, 31, 23, 59, 0) }
107-
val expectedDueDate = "January 31, 2023 11:59 PM"
108+
val expectedDueDate = "Jan 31, 2023 11:59 PM"
108109
val course = data.courses.values.first()
109110
val assignmentWithNoDueDate = data.addAssignment(course.id, name = "Test Assignment", dueAt = calendar.time.toApiString())
110111

@@ -113,6 +114,41 @@ class AssignmentDetailsInteractionTest : ParentComposeTest() {
113114
assignmentDetailsPage.assertDisplaysDate(expectedDueDate)
114115
}
115116

117+
@Test
118+
@TestMetaData(Priority.MANDATORY, FeatureCategory.ASSIGNMENTS, TestCategory.INTERACTION)
119+
fun testDisplayDueDates() {
120+
val data = setupData()
121+
var calendar = Calendar.getInstance().apply { set(2023, 0, 29, 23, 59, 0) }
122+
val expectedReplyToTopicDueDate = "Jan 29, 2023 11:59 PM"
123+
val replyToTopicDueDate = calendar.time.toApiString()
124+
125+
calendar = Calendar.getInstance().apply { set(2023, 0, 31, 23, 59, 0) }
126+
val expectedReplyToEntryDueDate = "Jan 31, 2023 11:59 PM"
127+
val replyToEntryDueDate = calendar.time.toApiString()
128+
val course = data.courses.values.first()
129+
130+
val checkpoints = listOf(
131+
Checkpoint(
132+
name = "Reply to Topic",
133+
tag = "reply_to_topic",
134+
dueAt = replyToTopicDueDate,
135+
pointsPossible = 10.0
136+
),
137+
Checkpoint(
138+
name = "Reply to Entry",
139+
tag = "reply_to_entry",
140+
dueAt = replyToEntryDueDate,
141+
pointsPossible = 10.0
142+
)
143+
)
144+
val assignmentWithNoDueDate = data.addAssignment(course.id, name = "Test Assignment", dueAt = calendar.time.toApiString(), checkpoints = checkpoints)
145+
146+
gotoAssignment(data, assignmentWithNoDueDate)
147+
148+
assignmentDetailsPage.assertDisplaysDate(expectedReplyToTopicDueDate, 0)
149+
assignmentDetailsPage.assertDisplaysDate(expectedReplyToEntryDueDate, 1)
150+
}
151+
116152
@Test
117153
fun testNavigating_viewAssignmentDetails() {
118154
// Test clicking on the Assignment item in the Assignment List to load the Assignment Details Page
@@ -272,6 +308,38 @@ class AssignmentDetailsInteractionTest : ParentComposeTest() {
272308
assignmentReminderPage.assertReminderSectionDisplayed()
273309
}
274310

311+
@Test
312+
@TestMetaData(Priority.IMPORTANT, FeatureCategory.ASSIGNMENTS, TestCategory.INTERACTION)
313+
fun testReminderSectionsAreVisibleWhenThereAreNoFutureDueDates() {
314+
val data = setupData()
315+
val course = data.courses.values.first()
316+
317+
val pastDate = Calendar.getInstance().apply {
318+
add(Calendar.DAY_OF_MONTH, -1)
319+
}.time.toApiString()
320+
321+
val checkpoints = listOf(
322+
Checkpoint(
323+
name = "Reply to Topic",
324+
tag = "reply_to_topic",
325+
dueAt = pastDate,
326+
pointsPossible = 10.0
327+
),
328+
Checkpoint(
329+
name = "Reply to Entry",
330+
tag = "reply_to_entry",
331+
dueAt = pastDate,
332+
pointsPossible = 10.0
333+
)
334+
)
335+
val assignment = data.addAssignment(course.id, name = "Test Assignment", dueAt = pastDate, checkpoints = checkpoints)
336+
337+
gotoAssignment(data, assignment)
338+
339+
assignmentDetailsPage.assertReminderViewDisplayed(0)
340+
assignmentDetailsPage.assertReminderViewDisplayed(1)
341+
}
342+
275343
@Test
276344
@TestMetaData(Priority.IMPORTANT, FeatureCategory.ASSIGNMENTS, TestCategory.INTERACTION)
277345
fun testReminderSectionIsVisibleWhenThereIsNoDueDate() {

apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentCalendarInteractionTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class ParentCalendarInteractionTest : CalendarInteractionTest() {
5151
override val activityRule = ParentActivityTestRule(LoginActivity::class.java)
5252

5353
private val dashboardPage = DashboardPage()
54-
private val assignmentDetailsPage = AssignmentDetailsPage(ModuleItemInteractions())
54+
private val assignmentDetailsPage = AssignmentDetailsPage(ModuleItemInteractions(), composeTestRule)
5555

5656
override fun goToCalendar(data: MockCanvas) {
5757
val parent = data.parents.first()

apps/parent/src/androidTest/java/com/instructure/parentapp/utils/ParentComposeTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.instructure.parentapp.utils
1919

2020
import androidx.compose.ui.test.junit4.createAndroidComposeRule
21+
import com.instructure.canvas.espresso.common.pages.AssignmentDetailsPage
2122
import com.instructure.canvas.espresso.common.pages.AssignmentReminderPage
2223
import com.instructure.canvas.espresso.common.pages.compose.CalendarEventCreateEditPage
2324
import com.instructure.canvas.espresso.common.pages.compose.CalendarEventDetailsPage
@@ -31,6 +32,7 @@ import com.instructure.canvas.espresso.common.pages.compose.InboxDetailsPage
3132
import com.instructure.canvas.espresso.common.pages.compose.InboxSignatureSettingsPage
3233
import com.instructure.canvas.espresso.common.pages.compose.RecipientPickerPage
3334
import com.instructure.canvas.espresso.common.pages.compose.SettingsPage
35+
import com.instructure.espresso.ModuleItemInteractions
3436
import com.instructure.parentapp.features.login.LoginActivity
3537
import com.instructure.parentapp.ui.pages.compose.AddStudentBottomPage
3638
import com.instructure.parentapp.ui.pages.compose.AlertsPage
@@ -80,6 +82,7 @@ abstract class ParentComposeTest : ParentTest() {
8082
protected val calendarFilterPage = CalendarFilterPage(composeTestRule)
8183
protected val assignmentReminderPage = AssignmentReminderPage(composeTestRule)
8284
protected val inboxSignatureSettingsPage = InboxSignatureSettingsPage(composeTestRule)
85+
protected val assignmentDetailsPage = AssignmentDetailsPage(ModuleItemInteractions(), composeTestRule)
8386

8487
override fun displaysPageObjects() = Unit
8588
}

apps/parent/src/androidTest/java/com/instructure/parentapp/utils/ParentTest.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,12 @@ package com.instructure.parentapp.utils
1919

2020
import com.instructure.canvas.espresso.CanvasTest
2121
import com.instructure.canvas.espresso.common.pages.AboutPage
22-
import com.instructure.canvas.espresso.common.pages.AssignmentDetailsPage
2322
import com.instructure.canvas.espresso.common.pages.CanvasNetworkSignInPage
2423
import com.instructure.canvas.espresso.common.pages.InboxPage
2524
import com.instructure.canvas.espresso.common.pages.LegalPage
2625
import com.instructure.canvas.espresso.common.pages.LoginFindSchoolPage
2726
import com.instructure.canvas.espresso.common.pages.LoginLandingPage
2827
import com.instructure.canvas.espresso.common.pages.LoginSignInPage
29-
import com.instructure.espresso.ModuleItemInteractions
3028
import com.instructure.parentapp.BuildConfig
3129
import com.instructure.parentapp.features.login.LoginActivity
3230
import com.instructure.parentapp.ui.pages.classic.DashboardPage
@@ -46,7 +44,6 @@ abstract class ParentTest : CanvasTest() {
4644
val dashboardPage = DashboardPage()
4745
val leftSideNavigationDrawerPage = LeftSideNavigationDrawerPage()
4846
val helpPage = HelpPage()
49-
val assignmentDetailsPage = AssignmentDetailsPage(ModuleItemInteractions())
5047
val syllabusPage = SyllabusPage()
5148
val frontPagePage = FrontPagePage()
5249

apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package com.instructure.student.ui.e2e.classic
1818

1919
import android.os.Environment
2020
import android.util.Log
21-
import androidx.compose.ui.test.junit4.createEmptyComposeRule
2221
import androidx.test.espresso.Espresso
2322
import androidx.test.espresso.intent.Intents
2423
import androidx.test.platform.app.InstrumentationRegistry
@@ -44,28 +43,22 @@ import com.instructure.dataseeding.util.Randomizer
4443
import com.instructure.dataseeding.util.days
4544
import com.instructure.dataseeding.util.fromNow
4645
import com.instructure.dataseeding.util.iso8601
47-
import com.instructure.student.ui.utils.StudentTest
46+
import com.instructure.student.ui.utils.StudentComposeTest
4847
import com.instructure.student.ui.utils.extensions.seedData
4948
import com.instructure.student.ui.utils.extensions.tokenLogin
5049
import com.instructure.student.ui.utils.extensions.uploadTextFile
5150
import dagger.hilt.android.testing.HiltAndroidTest
52-
import org.junit.Rule
5351
import org.junit.Test
5452
import java.io.File
5553
import java.io.FileWriter
5654

5755
@HiltAndroidTest
58-
class FilesE2ETest: StudentTest() {
56+
class FilesE2ETest: StudentComposeTest() {
5957

6058
override fun displaysPageObjects() = Unit
6159

6260
override fun enableAndConfigureAccessibilityChecks() = Unit
6361

64-
@get:Rule
65-
val composeTestRule = createEmptyComposeRule()
66-
67-
val assignmentListPage by lazy { AssignmentListPage(composeTestRule) }
68-
6962
@E2E
7063
@Test
7164
@TestMetaData(Priority.MANDATORY, FeatureCategory.FILES, TestCategory.E2E)

apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/GradesE2ETest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ import com.instructure.dataseeding.util.fromNow
2121
import com.instructure.dataseeding.util.iso8601
2222
import com.instructure.espresso.getDateInCanvasCalendarFormat
2323
import com.instructure.student.R
24-
import com.instructure.student.ui.utils.StudentTest
24+
import com.instructure.student.ui.utils.StudentComposeTest
2525
import com.instructure.student.ui.utils.extensions.seedData
2626
import com.instructure.student.ui.utils.extensions.tokenLogin
2727
import dagger.hilt.android.testing.HiltAndroidTest
2828
import org.junit.Test
2929

3030
@HiltAndroidTest
31-
class GradesE2ETest: StudentTest() {
31+
class GradesE2ETest: StudentComposeTest() {
3232

3333
override fun displaysPageObjects() = Unit
3434

apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ModulesE2ETest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ import com.instructure.dataseeding.model.SubmissionType
3535
import com.instructure.dataseeding.util.days
3636
import com.instructure.dataseeding.util.fromNow
3737
import com.instructure.dataseeding.util.iso8601
38-
import com.instructure.student.ui.utils.StudentTest
38+
import com.instructure.student.ui.utils.StudentComposeTest
3939
import com.instructure.student.ui.utils.extensions.seedData
4040
import com.instructure.student.ui.utils.extensions.tokenLogin
4141
import dagger.hilt.android.testing.HiltAndroidTest
4242
import org.junit.Test
4343

4444
@HiltAndroidTest
45-
class ModulesE2ETest: StudentTest() {
45+
class ModulesE2ETest: StudentComposeTest() {
4646

4747
override fun displaysPageObjects() = Unit
4848

apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,39 +19,33 @@ package com.instructure.student.ui.e2e.classic
1919
import android.content.Intent
2020
import android.net.Uri
2121
import android.util.Log
22-
import androidx.compose.ui.test.junit4.createEmptyComposeRule
2322
import androidx.test.espresso.Espresso
2423
import androidx.test.platform.app.InstrumentationRegistry
2524
import androidx.test.uiautomator.UiDevice
2625
import androidx.test.uiautomator.UiSelector
2726
import com.instructure.canvas.espresso.annotations.E2E
28-
import com.instructure.canvas.espresso.common.pages.compose.AssignmentListPage
27+
import com.instructure.canvas.espresso.annotations.Stub
2928
import com.instructure.canvas.espresso.pressBackButton
3029
import com.instructure.dataseeding.api.AssignmentsApi
3130
import com.instructure.dataseeding.model.GradingType
3231
import com.instructure.dataseeding.model.SubmissionType
3332
import com.instructure.dataseeding.util.days
3433
import com.instructure.dataseeding.util.fromNow
3534
import com.instructure.dataseeding.util.iso8601
36-
import com.instructure.student.ui.utils.StudentTest
35+
import com.instructure.student.ui.utils.StudentComposeTest
3736
import com.instructure.student.ui.utils.extensions.seedData
3837
import com.instructure.student.ui.utils.extensions.tokenLogin
3938
import dagger.hilt.android.testing.HiltAndroidTest
40-
import org.junit.Rule
4139
import org.junit.Test
4240

4341
@HiltAndroidTest
44-
class ShareExtensionE2ETest: StudentTest() {
42+
class ShareExtensionE2ETest: StudentComposeTest() {
4543

4644
override fun displaysPageObjects() = Unit
4745

4846
override fun enableAndConfigureAccessibilityChecks() = Unit
4947

50-
@get:Rule
51-
val composeTestRule = createEmptyComposeRule()
52-
53-
val assignmentListPage by lazy { AssignmentListPage(composeTestRule) }
54-
48+
@Stub
5549
@E2E
5650
@Test
5751
fun shareExtensionE2ETest() {

0 commit comments

Comments
 (0)