1
+ package com.nmc.android
2
+
3
+ import android.os.Looper
4
+ import androidx.activity.result.contract.ActivityResultContract
5
+ import androidx.test.espresso.Espresso.onView
6
+ import androidx.test.espresso.assertion.ViewAssertions.matches
7
+ import androidx.test.espresso.intent.rule.IntentsTestRule
8
+ import androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed
9
+ import androidx.test.espresso.matcher.ViewMatchers.withText
10
+ import com.google.android.material.bottomsheet.BottomSheetBehavior
11
+ import com.google.gson.Gson
12
+ import com.nextcloud.client.device.DeviceInfo
13
+ import com.nextcloud.client.documentscan.AppScanOptionalFeature
14
+ import com.nextcloud.utils.EditorUtils
15
+ import com.owncloud.android.AbstractIT
16
+ import com.owncloud.android.datamodel.ArbitraryDataProvider
17
+ import com.owncloud.android.datamodel.ArbitraryDataProviderImpl
18
+ import com.owncloud.android.datamodel.OCFile
19
+ import com.owncloud.android.lib.common.Creator
20
+ import com.owncloud.android.lib.common.DirectEditing
21
+ import com.owncloud.android.lib.resources.status.CapabilityBooleanType
22
+ import com.owncloud.android.ui.activity.FileDisplayActivity
23
+ import com.owncloud.android.ui.fragment.OCFileListBottomSheetActions
24
+ import com.owncloud.android.ui.fragment.OCFileListBottomSheetDialog
25
+ import com.owncloud.android.utils.MimeTypeUtil
26
+ import com.owncloud.android.utils.theme.CapabilityUtils
27
+ import org.junit.Before
28
+ import org.junit.Rule
29
+ import org.junit.Test
30
+ import org.mockito.Mock
31
+ import org.mockito.MockitoAnnotations
32
+
33
+ class OCFileListBottomSheetDialogIT : AbstractIT () {
34
+
35
+ @Mock
36
+ private lateinit var actions: OCFileListBottomSheetActions
37
+
38
+ @get:Rule
39
+ val activityRule = IntentsTestRule (FileDisplayActivity ::class .java, true , true )
40
+
41
+ @Before
42
+ fun setUp () {
43
+ MockitoAnnotations .initMocks(this )
44
+ }
45
+
46
+ @Test
47
+ fun validateCreateTextDocumentMenuOption () {
48
+ if (Looper .myLooper() == null ) {
49
+ Looper .prepare()
50
+ }
51
+
52
+ val info = DeviceInfo ()
53
+ val ocFile = OCFile (" /test.md" )
54
+
55
+ // add direct editing info
56
+ val creatorMap = mutableMapOf<String , Creator >()
57
+ creatorMap[" 1" ] = Creator (
58
+ " 1" ,
59
+ " md" ,
60
+ " markdown file" ,
61
+ " .md" ,
62
+ MimeTypeUtil .MIMETYPE_TEXT_MARKDOWN ,
63
+ false
64
+ )
65
+
66
+ val directEditing = DirectEditing (
67
+ creators = creatorMap
68
+ )
69
+
70
+ val json = Gson ().toJson(directEditing)
71
+ ArbitraryDataProviderImpl (targetContext).storeOrUpdateKeyValue(
72
+ user.accountName,
73
+ ArbitraryDataProvider .DIRECT_EDITING ,
74
+ json
75
+ )
76
+
77
+ val capability = activityRule.activity.capabilities
78
+ capability.richDocuments = CapabilityBooleanType .TRUE
79
+ capability.richDocumentsDirectEditing = CapabilityBooleanType .TRUE
80
+ capability.richDocumentsTemplatesAvailable = CapabilityBooleanType .TRUE
81
+ capability.accountName = user.accountName
82
+ CapabilityUtils .updateCapability(capability)
83
+
84
+ val appScanOptionalFeature: AppScanOptionalFeature = object : AppScanOptionalFeature () {
85
+ override fun getScanContract (): ActivityResultContract <Unit , String ?> {
86
+ throw UnsupportedOperationException (" Document scan is not available" )
87
+ }
88
+ }
89
+
90
+ val editorUtils = EditorUtils (ArbitraryDataProviderImpl (targetContext))
91
+ val sut = OCFileListBottomSheetDialog (
92
+ activityRule.activity,
93
+ actions,
94
+ info,
95
+ user,
96
+ ocFile,
97
+ activityRule.activity.themeUtils,
98
+ activityRule.activity.viewThemeUtils,
99
+ editorUtils,
100
+ appScanOptionalFeature
101
+ )
102
+
103
+ activityRule.activity.runOnUiThread { sut.show() }
104
+
105
+ waitForIdleSync()
106
+
107
+ sut.behavior.state = BottomSheetBehavior .STATE_EXPANDED
108
+
109
+ shortSleep()
110
+
111
+ onView(withText(" Create text document" )).check(matches(isCompletelyDisplayed()))
112
+ }
113
+ }
0 commit comments