Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
54168ae
student assignment details screen changes
andrasmaczak Sep 17, 2025
c94647c
updated reminder logic, removed unnecessary code
andrasmaczak Sep 18, 2025
99cad4c
unit tests added
andrasmaczak Sep 19, 2025
eef512c
Merge branch 'master' into MBL-19126-assignment-details-dcp
andrasmaczak Sep 22, 2025
0684449
added interaction tests
andrasmaczak Sep 23, 2025
4c4b9ff
fixed tests
andrasmaczak Sep 23, 2025
a14fbd9
fixed tests
andrasmaczak Sep 24, 2025
24c8c60
tryCount change reverted
andrasmaczak Sep 24, 2025
3446eb4
Offline DCP
kristofnemere Oct 7, 2025
5afd1a4
Merge branch 'master' into MBL-19126-assignment-details-dcp
kristofnemere Oct 7, 2025
88c808b
student assignment details screen changes
andrasmaczak Sep 17, 2025
14636dc
updated reminder logic, removed unnecessary code
andrasmaczak Sep 18, 2025
c2811b3
unit tests added
andrasmaczak Sep 19, 2025
c0ef2bc
added interaction tests
andrasmaczak Sep 23, 2025
fb83e49
fixed tests
andrasmaczak Sep 23, 2025
4da6537
fixed tests
andrasmaczak Sep 24, 2025
6a512fb
tryCount change reverted
andrasmaczak Sep 24, 2025
927868c
Offline DCP
kristofnemere Oct 7, 2025
58bc08c
test fixes
kristofnemere Oct 8, 2025
5b208c2
Merge remote-tracking branch 'origin/MBL-19126-assignment-details-dcp…
kristofnemere Oct 8, 2025
2617b45
Unstubbed already fixed tests
kristofnemere Oct 8, 2025
29131ca
Merge branch 'master' into MBL-19126-assignment-details-dcp
kristofnemere Oct 8, 2025
ffb1864
Comment fixes
kristofnemere Oct 8, 2025
5b2372d
Added replyRequiredCount to DiscussionTopicHeaderEntity.kt
kristofnemere Oct 9, 2025
c036045
Attempt to fix ShareExtensionE2ETest
kdeakinstructure Oct 10, 2025
c92cf3f
Revert "Attempt to fix ShareExtensionE2ETest"
kristofnemere Oct 10, 2025
fae5e6c
test fix
kristofnemere Oct 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/buildSrc/src/main/java/GlobalDependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ object Versions {
const val ENCRYPTED_SHARED_PREFERENCES = "1.0.0"
const val JAVA_JWT = "4.5.0"
const val GLANCE = "1.1.1"
const val LIVEDATA = "1.9.0"
}

object Libs {
Expand Down Expand Up @@ -131,7 +132,6 @@ object Libs {
const val LIFECYCLE_COMPILER = "androidx.lifecycle:lifecycle-compiler:${Versions.LIFECYCLE}"
const val COMPOSE_VIEW_MODEL = "androidx.lifecycle:lifecycle-viewmodel-compose:${Versions.LIFECYCLE}"
const val COMPOSE_NAVIGATION = "androidx.navigation:navigation-compose:2.8.9"

/* Media and content handling */
const val PSPDFKIT = "com.pspdfkit:pspdfkit:${Versions.PSPDFKIT}"
const val MEDIA3 = "androidx.media3:media3-exoplayer:${Versions.MEDIA3}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ class AssignmentReminderE2ETest: ParentComposeTest() {
Log.d(STEP_TAG, "Click on the '+' button (Add reminder) to pick up a new reminder.")
assignmentReminderPage.clickAddReminder()

val reminderDateOneDay = futureDueDate.apply { add(Calendar.DAY_OF_MONTH, -1) }
val reminderDateOneDay = futureDueDate.apply { add(Calendar.DAY_OF_MONTH, -1) }.apply { add(Calendar.HOUR, -1) }
Log.d(STEP_TAG, "Select '1 Day Before'.")
assignmentReminderPage.clickCustomReminderOption()
assignmentReminderPage.selectDate(reminderDateOneDay)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
import com.instructure.canvasapi2.models.AlertType
import com.instructure.canvasapi2.models.AlertWorkflowState
import com.instructure.canvasapi2.models.Assignment
import com.instructure.canvasapi2.models.Checkpoint
import com.instructure.canvasapi2.models.CourseSettings
import com.instructure.canvasapi2.utils.toApiString
import com.instructure.pandautils.utils.toFormattedString
Expand Down Expand Up @@ -104,7 +105,7 @@ class AssignmentDetailsInteractionTest : ParentComposeTest() {
fun testDisplayDueDate() {
val data = setupData()
val calendar = Calendar.getInstance().apply { set(2023, 0, 31, 23, 59, 0) }
val expectedDueDate = "January 31, 2023 11:59 PM"
val expectedDueDate = "Jan 31, 2023 11:59 PM"
val course = data.courses.values.first()
val assignmentWithNoDueDate = data.addAssignment(course.id, name = "Test Assignment", dueAt = calendar.time.toApiString())

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

@Test
@TestMetaData(Priority.MANDATORY, FeatureCategory.ASSIGNMENTS, TestCategory.INTERACTION)
fun testDisplayDueDates() {
val data = setupData()
var calendar = Calendar.getInstance().apply { set(2023, 0, 29, 23, 59, 0) }
val expectedReplyToTopicDueDate = "Jan 29, 2023 11:59 PM"
val replyToTopicDueDate = calendar.time.toApiString()

calendar = Calendar.getInstance().apply { set(2023, 0, 31, 23, 59, 0) }
val expectedReplyToEntryDueDate = "Jan 31, 2023 11:59 PM"
val replyToEntryDueDate = calendar.time.toApiString()
val course = data.courses.values.first()

val checkpoints = listOf(
Checkpoint(
name = "Reply to Topic",
tag = "reply_to_topic",
dueAt = replyToTopicDueDate,
pointsPossible = 10.0
),
Checkpoint(
name = "Reply to Entry",
tag = "reply_to_entry",
dueAt = replyToEntryDueDate,
pointsPossible = 10.0
)
)
val assignmentWithNoDueDate = data.addAssignment(course.id, name = "Test Assignment", dueAt = calendar.time.toApiString(), checkpoints = checkpoints)

gotoAssignment(data, assignmentWithNoDueDate)

assignmentDetailsPage.assertDisplaysDate(expectedReplyToTopicDueDate, 0)
assignmentDetailsPage.assertDisplaysDate(expectedReplyToEntryDueDate, 1)
}

@Test
fun testNavigating_viewAssignmentDetails() {
// Test clicking on the Assignment item in the Assignment List to load the Assignment Details Page
Expand Down Expand Up @@ -272,6 +308,38 @@ class AssignmentDetailsInteractionTest : ParentComposeTest() {
assignmentReminderPage.assertReminderSectionDisplayed()
}

@Test
@TestMetaData(Priority.IMPORTANT, FeatureCategory.ASSIGNMENTS, TestCategory.INTERACTION)
fun testReminderSectionsAreVisibleWhenThereAreNoFutureDueDates() {
val data = setupData()
val course = data.courses.values.first()

val pastDate = Calendar.getInstance().apply {
add(Calendar.DAY_OF_MONTH, -1)
}.time.toApiString()

val checkpoints = listOf(
Checkpoint(
name = "Reply to Topic",
tag = "reply_to_topic",
dueAt = pastDate,
pointsPossible = 10.0
),
Checkpoint(
name = "Reply to Entry",
tag = "reply_to_entry",
dueAt = pastDate,
pointsPossible = 10.0
)
)
val assignment = data.addAssignment(course.id, name = "Test Assignment", dueAt = pastDate, checkpoints = checkpoints)

gotoAssignment(data, assignment)

assignmentDetailsPage.assertReminderViewDisplayed(0)
assignmentDetailsPage.assertReminderViewDisplayed(1)
}

@Test
@TestMetaData(Priority.IMPORTANT, FeatureCategory.ASSIGNMENTS, TestCategory.INTERACTION)
fun testReminderSectionIsVisibleWhenThereIsNoDueDate() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class ParentCalendarInteractionTest : CalendarInteractionTest() {
override val activityRule = ParentActivityTestRule(LoginActivity::class.java)

private val dashboardPage = DashboardPage()
private val assignmentDetailsPage = AssignmentDetailsPage(ModuleItemInteractions())
private val assignmentDetailsPage = AssignmentDetailsPage(ModuleItemInteractions(), composeTestRule)

override fun goToCalendar(data: MockCanvas) {
val parent = data.parents.first()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package com.instructure.parentapp.utils

import androidx.compose.ui.test.junit4.createAndroidComposeRule
import com.instructure.canvas.espresso.common.pages.AssignmentDetailsPage
import com.instructure.canvas.espresso.common.pages.AssignmentReminderPage
import com.instructure.canvas.espresso.common.pages.compose.CalendarEventCreateEditPage
import com.instructure.canvas.espresso.common.pages.compose.CalendarEventDetailsPage
Expand All @@ -31,6 +32,7 @@ import com.instructure.canvas.espresso.common.pages.compose.InboxDetailsPage
import com.instructure.canvas.espresso.common.pages.compose.InboxSignatureSettingsPage
import com.instructure.canvas.espresso.common.pages.compose.RecipientPickerPage
import com.instructure.canvas.espresso.common.pages.compose.SettingsPage
import com.instructure.espresso.ModuleItemInteractions
import com.instructure.parentapp.features.login.LoginActivity
import com.instructure.parentapp.ui.pages.compose.AddStudentBottomPage
import com.instructure.parentapp.ui.pages.compose.AlertsPage
Expand Down Expand Up @@ -80,6 +82,7 @@ abstract class ParentComposeTest : ParentTest() {
protected val calendarFilterPage = CalendarFilterPage(composeTestRule)
protected val assignmentReminderPage = AssignmentReminderPage(composeTestRule)
protected val inboxSignatureSettingsPage = InboxSignatureSettingsPage(composeTestRule)
protected val assignmentDetailsPage = AssignmentDetailsPage(ModuleItemInteractions(), composeTestRule)

override fun displaysPageObjects() = Unit
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,12 @@ package com.instructure.parentapp.utils

import com.instructure.canvas.espresso.CanvasTest
import com.instructure.canvas.espresso.common.pages.AboutPage
import com.instructure.canvas.espresso.common.pages.AssignmentDetailsPage
import com.instructure.canvas.espresso.common.pages.CanvasNetworkSignInPage
import com.instructure.canvas.espresso.common.pages.InboxPage
import com.instructure.canvas.espresso.common.pages.LegalPage
import com.instructure.canvas.espresso.common.pages.LoginFindSchoolPage
import com.instructure.canvas.espresso.common.pages.LoginLandingPage
import com.instructure.canvas.espresso.common.pages.LoginSignInPage
import com.instructure.espresso.ModuleItemInteractions
import com.instructure.parentapp.BuildConfig
import com.instructure.parentapp.features.login.LoginActivity
import com.instructure.parentapp.ui.pages.classic.DashboardPage
Expand All @@ -46,7 +44,6 @@ abstract class ParentTest : CanvasTest() {
val dashboardPage = DashboardPage()
val leftSideNavigationDrawerPage = LeftSideNavigationDrawerPage()
val helpPage = HelpPage()
val assignmentDetailsPage = AssignmentDetailsPage(ModuleItemInteractions())
val syllabusPage = SyllabusPage()
val frontPagePage = FrontPagePage()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package com.instructure.student.ui.e2e.classic

import android.os.Environment
import android.util.Log
import androidx.compose.ui.test.junit4.createEmptyComposeRule
import androidx.test.espresso.Espresso
import androidx.test.espresso.intent.Intents
import androidx.test.platform.app.InstrumentationRegistry
Expand All @@ -44,28 +43,22 @@ import com.instructure.dataseeding.util.Randomizer
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
import com.instructure.student.ui.utils.extensions.uploadTextFile
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Rule
import org.junit.Test
import java.io.File
import java.io.FileWriter

@HiltAndroidTest
class FilesE2ETest: StudentTest() {
class FilesE2ETest: StudentComposeTest() {

override fun displaysPageObjects() = Unit

override fun enableAndConfigureAccessibilityChecks() = Unit

@get:Rule
val composeTestRule = createEmptyComposeRule()

val assignmentListPage by lazy { AssignmentListPage(composeTestRule) }

@E2E
@Test
@TestMetaData(Priority.MANDATORY, FeatureCategory.FILES, TestCategory.E2E)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
import com.instructure.espresso.getDateInCanvasCalendarFormat
import com.instructure.student.R
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test

@HiltAndroidTest
class GradesE2ETest: StudentTest() {
class GradesE2ETest: StudentComposeTest() {

override fun displaysPageObjects() = Unit

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test

@HiltAndroidTest
class ModulesE2ETest: StudentTest() {
class ModulesE2ETest: StudentComposeTest() {

override fun displaysPageObjects() = Unit

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,39 +19,33 @@ package com.instructure.student.ui.e2e.classic
import android.content.Intent
import android.net.Uri
import android.util.Log
import androidx.compose.ui.test.junit4.createEmptyComposeRule
import androidx.test.espresso.Espresso
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiSelector
import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.canvas.espresso.common.pages.compose.AssignmentListPage
import com.instructure.canvas.espresso.annotations.Stub
import com.instructure.canvas.espresso.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.model.GradingType
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Rule
import org.junit.Test

@HiltAndroidTest
class ShareExtensionE2ETest: StudentTest() {
class ShareExtensionE2ETest: StudentComposeTest() {

override fun displaysPageObjects() = Unit

override fun enableAndConfigureAccessibilityChecks() = Unit

@get:Rule
val composeTestRule = createEmptyComposeRule()

val assignmentListPage by lazy { AssignmentListPage(composeTestRule) }

@Stub
@E2E
@Test
fun shareExtensionE2ETest() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
import com.instructure.student.ui.pages.classic.k5.ElementaryDashboardPage
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedDataForK5
import com.instructure.student.ui.utils.extensions.tokenLoginElementary
import dagger.hilt.android.testing.HiltAndroidTest
Expand All @@ -41,7 +41,7 @@ import java.util.Date
import java.util.Locale

@HiltAndroidTest
class ImportantDatesE2ETest : StudentTest() {
class ImportantDatesE2ETest : StudentComposeTest() {

override fun displaysPageObjects() = Unit

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import com.instructure.espresso.page.getStringFromResource
import com.instructure.espresso.page.withAncestor
import com.instructure.student.R
import com.instructure.student.ui.pages.classic.k5.ElementaryDashboardPage
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedDataForK5
import com.instructure.student.ui.utils.extensions.tokenLoginElementary
import dagger.hilt.android.testing.HiltAndroidTest
Expand All @@ -46,7 +46,7 @@ import java.util.Locale
import java.util.TimeZone

@HiltAndroidTest
class ScheduleE2ETest : StudentTest() {
class ScheduleE2ETest : StudentComposeTest() {

override fun displaysPageObjects() = Unit

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
import com.instructure.espresso.getDateInCanvasCalendarFormat
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
import com.instructure.student.ui.utils.offline.OfflineTestUtils
Expand All @@ -46,7 +46,7 @@ import org.junit.After
import org.junit.Test

@HiltAndroidTest
class OfflineGradesE2ETest : StudentTest() {
class OfflineGradesE2ETest : StudentComposeTest() {

override fun displaysPageObjects() = Unit

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
import com.instructure.student.ui.utils.offline.OfflineTestUtils
Expand All @@ -47,7 +47,7 @@ import org.junit.After
import org.junit.Test

@HiltAndroidTest
class OfflineModulesE2ETest : StudentTest() {
class OfflineModulesE2ETest : StudentComposeTest() {

override fun displaysPageObjects() = Unit

Expand Down
Loading
Loading