Skip to content

Commit

Permalink
[MBL-17755][All] Added inbox signature to inbox compose screen (#2790)
Browse files Browse the repository at this point in the history
refs: MBL-17755
affects: Student, Teacher, Parent
release note: Inbox signature is now added to inbox messages.

* Add inbox signature at the end of the message.

* Unit tests.

* UI tests.

* Fixed Teacher tests

* Changed signature loading ui logic.
  • Loading branch information
tamaskozmer authored Feb 12, 2025
1 parent f11cd1b commit 1e3aede
Show file tree
Hide file tree
Showing 37 changed files with 42,623 additions and 29,966 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ import com.instructure.canvas.espresso.common.pages.compose.InboxComposePage
import com.instructure.canvas.espresso.mockCanvas.MockCanvas
import com.instructure.canvas.espresso.mockCanvas.addCoursePermissions
import com.instructure.canvas.espresso.mockCanvas.addRecipientsToCourse
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockCanvas.init
import com.instructure.canvasapi2.di.GraphQlApiModule
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.CanvasContextPermission
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.Course
Expand All @@ -23,11 +26,14 @@ import com.instructure.parentapp.ui.pages.DashboardPage
import com.instructure.parentapp.ui.pages.ParentInboxCoursePickerPage
import com.instructure.parentapp.utils.ParentActivityTestRule
import com.instructure.parentapp.utils.tokenLogin
import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import org.hamcrest.Matchers
import org.junit.Test

@HiltAndroidTest
@UninstallModules(GraphQlApiModule::class)
class ParentInboxComposeInteractionTest: InboxComposeInteractionTest() {
override val isTesting = BuildConfig.IS_TESTING

Expand All @@ -38,6 +44,10 @@ class ParentInboxComposeInteractionTest: InboxComposeInteractionTest() {
private val inboxComposePage = InboxComposePage(composeTestRule)
private val inboxCoursePickerPage = ParentInboxCoursePickerPage(composeTestRule)

@BindValue
@JvmField
val inboxSettingsManager: InboxSettingsManager = FakeInboxSettingsManager()

@Test
fun testParentComposeDefaultValues() {
val data = initData(canSendToAll = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import com.instructure.canvasapi2.apis.GroupAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.ProgressAPI
import com.instructure.canvasapi2.apis.RecipientAPI
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.pandautils.features.inbox.compose.InboxComposeRepository
import com.instructure.pandautils.features.inbox.details.InboxDetailsBehavior
import com.instructure.pandautils.features.inbox.list.InboxRepository
Expand Down Expand Up @@ -60,19 +61,21 @@ class InboxModule {
inboxApi: InboxApi.InboxInterface,
coursesApi: CourseAPI.CoursesInterface,
groupsApi: GroupAPI.GroupInterface,
progressApi: ProgressAPI.ProgressInterface
progressApi: ProgressAPI.ProgressInterface,
inboxSettingsManager: InboxSettingsManager
): InboxRepository {
return ParentInboxRepository(inboxApi, coursesApi, groupsApi, progressApi)
return ParentInboxRepository(inboxApi, coursesApi, groupsApi, progressApi, inboxSettingsManager)
}

@Provides
fun provideInboxComposeRepository(
courseAPI: CourseAPI.CoursesInterface,
recipientAPI: RecipientAPI.RecipientInterface,
inboxAPI: InboxApi.InboxInterface,
parentPrefs: ParentPrefs
parentPrefs: ParentPrefs,
inboxSettingsManager: InboxSettingsManager
): InboxComposeRepository {
return ParentInboxComposeRepository(courseAPI, parentPrefs, recipientAPI, inboxAPI)
return ParentInboxComposeRepository(courseAPI, parentPrefs, recipientAPI, inboxAPI, inboxSettingsManager)
}

@Provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import com.instructure.canvasapi2.apis.CourseAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.RecipientAPI
import com.instructure.canvasapi2.builders.RestParams
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Group
import com.instructure.canvasapi2.utils.DataResult
Expand All @@ -31,8 +32,9 @@ class ParentInboxComposeRepository(
private val courseAPI: CourseAPI.CoursesInterface,
private val parentPrefs: ParentPrefs,
recipientAPI: RecipientAPI.RecipientInterface,
inboxAPI: InboxApi.InboxInterface
): InboxComposeRepository(courseAPI, recipientAPI, inboxAPI) {
inboxAPI: InboxApi.InboxInterface,
inboxSettingsManager: InboxSettingsManager
): InboxComposeRepository(courseAPI, recipientAPI, inboxAPI, inboxSettingsManager) {

override suspend fun getCourses(forceRefresh: Boolean): DataResult<List<Course>> {
val params = RestParams(usePerPageQueryParam = true, isForceReadFromNetwork = forceRefresh)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.instructure.canvasapi2.apis.GroupAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.ProgressAPI
import com.instructure.canvasapi2.builders.RestParams
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Enrollment
import com.instructure.canvasapi2.utils.DataResult
Expand All @@ -34,8 +35,9 @@ class ParentInboxRepository(
inboxApi: InboxApi.InboxInterface,
private val coursesApi: CourseAPI.CoursesInterface,
groupsApi: GroupAPI.GroupInterface,
progressApi: ProgressAPI.ProgressInterface
) : InboxRepository(inboxApi, groupsApi, progressApi) {
progressApi: ProgressAPI.ProgressInterface,
inboxSettingsManager: InboxSettingsManager
) : InboxRepository(inboxApi, groupsApi, progressApi, inboxSettingsManager) {

override suspend fun getCourses(params: RestParams): DataResult<List<Course>> {
val coursesResult = coursesApi.getCoursesByEnrollmentType(Enrollment.EnrollmentType.Observer.apiTypeString, params)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.instructure.parentapp.features.inbox.compose
import com.instructure.canvasapi2.apis.CourseAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.RecipientAPI
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Enrollment
Expand Down Expand Up @@ -33,6 +34,7 @@ class ParentInboxComposeRepositoryTest {
private val parentPrefs: ParentPrefs = mockk(relaxed = true)
private val recipientAPI: RecipientAPI.RecipientInterface = mockk(relaxed = true)
private val inboxAPI: InboxApi.InboxInterface = mockk(relaxed = true)
private val inboxSettingsManager: InboxSettingsManager = mockk(relaxed = true)

private val studentId = 1L

Expand All @@ -41,6 +43,7 @@ class ParentInboxComposeRepositoryTest {
parentPrefs,
recipientAPI,
inboxAPI,
inboxSettingsManager
)

@Before
Expand Down Expand Up @@ -154,4 +157,15 @@ class ParentInboxComposeRepositoryTest {

inboxComposeRepository.createConversation(emptyList(), "", "", Course(), emptyList(), false).dataOrThrow
}

@Test
fun `Get signature successfully`() = runTest {
val expected = "signature"

coEvery { inboxSettingsManager.getInboxSignature() } returns expected

val result = inboxComposeRepository.getInboxSignature()

assertEquals(expected, result)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import com.instructure.canvasapi2.apis.EnrollmentAPI
import com.instructure.canvasapi2.apis.GroupAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.ProgressAPI
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Enrollment
import com.instructure.canvasapi2.utils.DataResult
Expand All @@ -33,9 +34,10 @@ class ParentInboxRepositoryTest {
private val coursesApi: CourseAPI.CoursesInterface = mockk(relaxed = true)
private val groupsApi: GroupAPI.GroupInterface = mockk(relaxed = true)
private val progressApi: ProgressAPI.ProgressInterface = mockk(relaxed = true)
private val inboxSettingsManager: InboxSettingsManager = mockk(relaxed = true)

private val inboxRepository =
ParentInboxRepository(inboxApi, coursesApi, groupsApi, progressApi)
ParentInboxRepository(inboxApi, coursesApi, groupsApi, progressApi, inboxSettingsManager)

@Test
fun `Get contexts returns only valid courses`() = runTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ import com.instructure.canvas.espresso.common.pages.InboxPage
import com.instructure.canvas.espresso.mockCanvas.MockCanvas
import com.instructure.canvas.espresso.mockCanvas.addCoursePermissions
import com.instructure.canvas.espresso.mockCanvas.addRecipientsToCourse
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockCanvas.init
import com.instructure.canvasapi2.di.GraphQlApiModule
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.CanvasContextPermission
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.Course
Expand All @@ -35,10 +38,13 @@ import com.instructure.student.activity.LoginActivity
import com.instructure.student.ui.pages.DashboardPage
import com.instructure.student.ui.utils.StudentActivityTestRule
import com.instructure.student.ui.utils.tokenLogin
import dagger.hilt.android.testing.BindValue
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import org.hamcrest.Matchers

@HiltAndroidTest
@UninstallModules(GraphQlApiModule::class)
class StudentInboxComposeInteractionTest: InboxComposeInteractionTest() {
override val isTesting = BuildConfig.IS_TESTING

Expand All @@ -47,6 +53,10 @@ class StudentInboxComposeInteractionTest: InboxComposeInteractionTest() {
private val dashboardPage = DashboardPage()
private val inboxPage = InboxPage()

@BindValue
@JvmField
val inboxSettingsManager: InboxSettingsManager = FakeInboxSettingsManager()

override fun goToInboxCompose(data: MockCanvas) {
val parent = data.parents.first()
val token = data.tokenFor(parent)!!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import com.instructure.canvasapi2.apis.GroupAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.ProgressAPI
import com.instructure.canvasapi2.apis.RecipientAPI
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.pandautils.features.inbox.compose.InboxComposeRepository
import com.instructure.pandautils.features.inbox.list.InboxRepository
import com.instructure.pandautils.features.inbox.list.InboxRouter
Expand Down Expand Up @@ -54,18 +55,20 @@ class InboxModule {
inboxApi: InboxApi.InboxInterface,
coursesApi: CourseAPI.CoursesInterface,
groupsApi: GroupAPI.GroupInterface,
progressApi: ProgressAPI.ProgressInterface
progressApi: ProgressAPI.ProgressInterface,
inboxSettingsManager: InboxSettingsManager
): InboxRepository {
return StudentInboxRepository(inboxApi, coursesApi, groupsApi, progressApi)
return StudentInboxRepository(inboxApi, coursesApi, groupsApi, progressApi, inboxSettingsManager)
}

@Provides
fun provideInboxComposeRepository(
courseApi: CourseAPI.CoursesInterface,
groupsApi: GroupAPI.GroupInterface,
recipientApi: RecipientAPI.RecipientInterface,
inboxApi: InboxApi.InboxInterface
inboxApi: InboxApi.InboxInterface,
inboxSettingsManager: InboxSettingsManager
): InboxComposeRepository {
return StudentInboxComposeRepository(courseApi, groupsApi, recipientApi, inboxApi)
return StudentInboxComposeRepository(courseApi, groupsApi, recipientApi, inboxApi, inboxSettingsManager)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.instructure.canvasapi2.apis.GroupAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.RecipientAPI
import com.instructure.canvasapi2.builders.RestParams
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Group
import com.instructure.canvasapi2.utils.DataResult
Expand All @@ -32,7 +33,8 @@ class StudentInboxComposeRepository(
private val groupApi: GroupAPI.GroupInterface,
recipientAPI: RecipientAPI.RecipientInterface,
inboxAPI: InboxApi.InboxInterface,
): InboxComposeRepository(courseAPI, recipientAPI, inboxAPI) {
inboxSettingsManager: InboxSettingsManager
): InboxComposeRepository(courseAPI, recipientAPI, inboxAPI, inboxSettingsManager) {

override suspend fun getCourses(forceRefresh: Boolean): DataResult<List<Course>> {
val params = RestParams(usePerPageQueryParam = true, isForceReadFromNetwork = forceRefresh)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import com.instructure.canvasapi2.apis.GroupAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.ProgressAPI
import com.instructure.canvasapi2.builders.RestParams
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.utils.DataResult
import com.instructure.canvasapi2.utils.depaginate
Expand All @@ -32,8 +33,9 @@ class StudentInboxRepository(
inboxApi: InboxApi.InboxInterface,
private val coursesApi: CourseAPI.CoursesInterface,
groupsApi: GroupAPI.GroupInterface,
progressApi: ProgressAPI.ProgressInterface
) : InboxRepository(inboxApi, groupsApi, progressApi) {
progressApi: ProgressAPI.ProgressInterface,
inboxSettingsManager: InboxSettingsManager
) : InboxRepository(inboxApi, groupsApi, progressApi, inboxSettingsManager) {

override suspend fun getCourses(params: RestParams): DataResult<List<Course>> {
val coursesResult = coursesApi.getFirstPageCourses(params)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.instructure.canvasapi2.apis.EnrollmentAPI
import com.instructure.canvasapi2.apis.GroupAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.RecipientAPI
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Enrollment
Expand All @@ -31,12 +32,14 @@ class StudentInboxComposeRepositoryTest {
private val groupApi: GroupAPI.GroupInterface = mockk(relaxed = true)
private val recipientAPI: RecipientAPI.RecipientInterface = mockk(relaxed = true)
private val inboxAPI: InboxApi.InboxInterface = mockk(relaxed = true)
private val inboxSettingsManager: InboxSettingsManager = mockk(relaxed = true)

private val inboxComposeRepository = StudentInboxComposeRepository(
courseAPI,
groupApi,
recipientAPI,
inboxAPI,
inboxSettingsManager
)

@After
Expand Down Expand Up @@ -169,4 +172,15 @@ class StudentInboxComposeRepositoryTest {

inboxComposeRepository.createConversation(emptyList(), "", "", Course(), emptyList(), false).dataOrThrow
}

@Test
fun `Get signature successfully`() = runTest {
val expected = "signature"

coEvery { inboxSettingsManager.getInboxSignature() } returns expected

val result = inboxComposeRepository.getInboxSignature()

assertEquals(expected, result)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.instructure.canvasapi2.apis.EnrollmentAPI
import com.instructure.canvasapi2.apis.GroupAPI
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.apis.ProgressAPI
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Enrollment
import com.instructure.canvasapi2.models.Group
Expand All @@ -36,9 +37,10 @@ class StudentInboxRepositoryTest {
private val coursesApi: CourseAPI.CoursesInterface = mockk(relaxed = true)
private val groupsApi: GroupAPI.GroupInterface = mockk(relaxed = true)
private val progressApi: ProgressAPI.ProgressInterface = mockk(relaxed = true)
private val inboxSettingsManager: InboxSettingsManager = mockk(relaxed = true)

private val inboxRepository =
StudentInboxRepository(inboxApi, coursesApi, groupsApi, progressApi)
StudentInboxRepository(inboxApi, coursesApi, groupsApi, progressApi, inboxSettingsManager)

@Test
fun `Get contexts returns only valid courses`() = runTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@ import com.instructure.canvas.espresso.mockCanvas.addAssignment
import com.instructure.canvas.espresso.mockCanvas.addCoursePermissions
import com.instructure.canvas.espresso.mockCanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeCommentLibraryManager
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockCanvas.init
import com.instructure.canvasapi2.di.GraphQlApiModule
import com.instructure.canvasapi2.managers.CommentLibraryManager
import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.models.Assignment
import com.instructure.canvasapi2.models.CanvasContextPermission
import com.instructure.teacher.ui.utils.TeacherTest
Expand All @@ -48,6 +50,10 @@ class CommentLibraryPageTest : TeacherTest() {
@JvmField
val commentLibraryManager: CommentLibraryManager = FakeCommentLibraryManager()

@BindValue
@JvmField
val inboxSettingsManager: InboxSettingsManager = FakeInboxSettingsManager()

@Test
@TestMetaData(Priority.IMPORTANT, FeatureCategory.SPEED_GRADER, TestCategory.INTERACTION)
fun showAllItemsWhenCommentFieldIsClicked() {
Expand Down
Loading

0 comments on commit 1e3aede

Please sign in to comment.