Skip to content
Projects
Groups
Snippets
Help
Sign in / Register
Toggle navigation
Minds Mobile
Project overview
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Locked Files
Issues
196
Merge Requests
11
Security & Compliance
Packages
Wiki
Snippets
Members
Collapse sidebar
Close sidebar
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Minds
Minds Mobile
Commits
75022227
Commit
75022227
authored
45 minutes ago
by
Juan Manuel Solaro
Browse files
Options
Download
(feat) channel flow
parent
9ee0d90b
my-channel-e2e-tests
No related merge requests found
Changes
9
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
116 additions
and
18 deletions
+116
-18
e2e/channel.spec.js
0 → 100644
View file @
75022227
import
{
waitForElement
,
waitForAndType
,
tapElement
,
waitForAndTap
}
from
'
./helpers/waitFor
'
;
import
{
deletePost
}
from
'
./actions/capturePoster
'
;
import
login
from
'
./actions/login
'
;
/**
* Uses process.env.userDisplayName:
* export userDisplayName="Something Something"
*/
describe
(
'
Channel Flow
'
,
()
=>
{
beforeEach
(
async
()
=>
{
await
device
.
launchApp
({
newInstance
:
true
,
permissions
:
{
notifications
:
'
YES
'
,
camera
:
'
YES
'
,
medialibrary
:
'
YES
'
,
photos
:
'
YES
'
,
},
});
await
waitForElement
(
by
.
id
(
'
usernameInput
'
));
await
login
(
process
.
env
.
loginUser
,
process
.
env
.
loginPass
);
await
waitForAndTap
(
by
.
id
(
'
AvatarButton
'
));
});
it
(
'
channel header should be render correctly
'
,
async
()
=>
{
const
beVisible
=
true
;
await
waitForElement
(
by
.
id
(
'
SubscribersView
'
));
await
waitForElement
(
by
.
id
(
'
ViewsView
'
));
await
waitForElement
(
by
.
id
(
'
ChannelNameView
'
));
await
waitForElement
(
by
.
id
(
'
SubscribeButton
'
),
!
beVisible
);
await
waitForElement
(
by
.
id
(
'
SendMessageButton
'
),
!
beVisible
);
await
waitForElement
(
by
.
id
(
'
EditButton
'
));
await
waitForElement
(
by
.
id
(
'
WireButton
'
),
!
beVisible
);
await
waitForElement
(
by
.
id
(
'
MoreButton
'
),
!
beVisible
);
});
it
(
'
should be able to change display name
'
,
async
()
=>
{
const
displayNameTest
=
"
New Display Name
"
;
const
replaceText
=
true
;
// new display name
await
waitForAndTap
(
by
.
id
(
'
EditButton
'
));
await
waitForAndType
(
by
.
id
(
'
ChannelNameTextInput
'
),
displayNameTest
,
replaceText
);
await
tapElement
(
by
.
id
(
'
EditButton
'
));
await
waitForElement
(
by
.
id
(
'
ChannelNameView
'
));
// display name back to normal
await
waitForAndTap
(
by
.
id
(
'
EditButton
'
));
await
waitForAndType
(
by
.
id
(
'
ChannelNameTextInput
'
),
process
.
env
.
userDisplayName
,
replaceText
);
await
tapElement
(
by
.
id
(
'
EditButton
'
));
await
waitForElement
(
by
.
id
(
'
ChannelNameView
'
));
});
it
(
'
should be able to create a post
'
,
async
()
=>
{
const
text
=
'
e2eTest
'
;
await
waitForAndTap
(
by
.
id
(
'
captureFab
'
));
// create post
await
waitForAndType
(
by
.
id
(
'
PostInput
'
),
text
);
await
tapElement
(
by
.
id
(
'
CapturePostButton
'
));
// wait for channelscreen
await
waitForElement
(
by
.
id
(
'
ChannelScreen
'
));
await
deletePost
();
});
it
(
'
should be move between tabs
'
,
async
()
=>
{
// wait for channelscreen
await
waitForElement
(
by
.
id
(
'
ChannelScreen
'
));
await
tapElement
(
by
.
id
(
'
ImagesButton
'
));
await
tapElement
(
by
.
id
(
'
VideosButton
'
));
await
tapElement
(
by
.
id
(
'
BlogsButton
'
));
await
tapElement
(
by
.
id
(
'
FeedButton
'
));
});
});
This diff is collapsed.
e2e/helpers/waitFor.js
View file @
75022227
export
const
TIME
=
10000
;
export
const
waitForElement
=
async
(
e
)
=>
{
await
waitFor
(
element
(
e
)).
toBeVisible
().
withTimeout
(
TIME
);
export
const
waitForElement
=
async
(
e
,
visible
=
true
)
=>
{
if
(
visible
)
{
await
waitFor
(
element
(
e
)).
toBeVisible
().
withTimeout
(
TIME
);
}
else
{
await
waitFor
(
element
(
e
)).
toBeNotVisible
().
withTimeout
(
TIME
);
}
}
export
const
tapElement
=
async
(
e
)
=>
{
await
element
(
e
).
tap
();
}
export
const
typeText
=
async
(
e
,
text
)
=>
{
await
element
(
e
).
typeText
(
text
);
export
const
typeText
=
async
(
e
,
text
,
replaceText
=
false
)
=>
{
if
(
!
replaceText
)
{
await
element
(
e
).
typeText
(
text
);
}
else
{
await
element
(
e
).
replaceText
(
text
);
}
}
export
const
waitForAndTap
=
async
(
e
)
=>
{
...
...
@@ -17,7 +25,7 @@ export const waitForAndTap = async (e) => {
await
tapElement
(
e
);
}
export
const
waitForAndType
=
async
(
e
,
text
)
=>
{
export
const
waitForAndType
=
async
(
e
,
text
,
replaceText
=
false
)
=>
{
await
waitForElement
(
e
);
await
typeText
(
e
,
text
);
await
typeText
(
e
,
text
,
replaceText
);
}
\ No newline at end of file
This diff is collapsed.
src/channel/ChannelActions.js
View file @
75022227
...
...
@@ -160,6 +160,7 @@ class ChannelActions extends Component {
containerStyle
=
{[
CS
.
rowJustifyCenter
,
CS
.
marginLeft0x
]}
accessibilityLabel
=
{
i18n
.
t
(
'
channel.subscribeMessage
'
)}
text
=
{
i18n
.
t
(
'
channel.subscribe
'
)}
testID
=
"
SubscribeButton
"
/>
}
{
showMessage
&&
...
...
@@ -168,6 +169,7 @@ class ChannelActions extends Component {
containerStyle
=
{[
CS
.
rowJustifyCenter
,
CS
.
marginLeft0x
]}
accessibilityLabel
=
{
i18n
.
t
(
'
channel.sendMessage
'
)}
text
=
{
i18n
.
t
(
'
channel.message
'
)}
testID
=
"
SendMessageButton
"
/>
}
{
showEdit
&&
...
...
@@ -177,6 +179,7 @@ class ChannelActions extends Component {
accessibilityLabel
=
{
this
.
props
.
editing
?
i18n
.
t
(
'
channel.saveChanges
'
)
:
i18n
.
t
(
'
channel.editChannel
'
)}
text
=
{
this
.
props
.
editing
?
i18n
.
t
(
'
save
'
)
:
i18n
.
t
(
'
edit
'
)}
loading
=
{
this
.
props
.
saving
}
testID
=
"
EditButton
"
/>
}
{
showMode
&&
...
...
@@ -190,6 +193,7 @@ class ChannelActions extends Component {
textStyle
=
{[
CS
.
marginLeft
,
CS
.
marginRight
]}
icon
=
"
ios-flash
"
text
=
"
Wire
"
testID
=
"
WireButton
"
>
<
Icon
name
=
'
ios-flash
'
size
=
{
18
}
style
=
{[
CS
.
marginLeft
,
CS
.
colorPrimary
]}
/
>
<
/ButtonCustom
>
...
...
@@ -202,6 +206,7 @@ class ChannelActions extends Component {
textStyle
=
{[
CS
.
marginLeft
,
CS
.
marginRight
]}
icon
=
"
ios-flash
"
text
=
{
i18n
.
t
(
'
more
'
)}
testID
=
"
MoreButton
"
/>
}
<
ActionSheet
...
...
This diff is collapsed.
src/channel/ChannelScreen.js
View file @
75022227
...
...
@@ -329,12 +329,12 @@ class ChannelScreen extends Component {
/
>
return
(
<
View
style
=
{
CommonStyle
.
flexContainer
}
>
<
View
style
=
{
CommonStyle
.
flexContainer
}
testID
=
"
ChannelScreen
"
>
{
(
!
channel
.
blocked
&&
!
isClosed
)
?
body
:
header
}
<
SafeAreaView
style
=
{
styles
.
gobackicon
}
>
<
Icon
raised
color
=
{
colors
.
primary
}
size
=
{
22
}
name
=
'
arrow-back
'
onPress
=
{
this
.
goBack
}
/
>
<
/SafeAreaView
>
<
CaptureFab
navigation
=
{
this
.
props
.
navigation
}
/
>
<
CaptureFab
navigation
=
{
this
.
props
.
navigation
}
testID
=
"
captureFab
"
/>
<
/View
>
);
}
...
...
This diff is collapsed.
src/channel/header/ChannelHeader.js
View file @
75022227
...
...
@@ -217,12 +217,12 @@ export default class ChannelHeader extends Component {
<
View
style
=
{
styles
.
headertextcontainer
}
>
<
View
style
=
{
styles
.
countercontainer
}
>
<
TouchableHighlightCustom
underlayColor
=
"
transparent
"
style
=
{[
styles
.
counter
]}
onPress
=
{()
=>
{
this
.
_navToSubscribers
()
}}
>
<
View
style
=
{
styles
.
counter
}
>
<
View
style
=
{
styles
.
counter
}
testID
=
"
SubscribersView
"
>
<
Text
style
=
{
styles
.
countertitle
}
>
{
i18n
.
t
(
'
subscribers
'
).
toUpperCase
()}
<
/Text
>
<
Text
style
=
{
styles
.
countervalue
}
>
{
abbrev
(
channel
.
subscribers_count
,
0
)}
<
/Text
>
<
/View
>
<
/TouchableHighlightCustom
>
<
View
style
=
{
styles
.
counter
}
>
<
View
style
=
{
styles
.
counter
}
testID
=
"
ViewsView
"
>
<
Text
style
=
{
styles
.
countertitle
}
>
{
i18n
.
t
(
'
views
'
).
toUpperCase
()}
<
/Text
>
<
Text
style
=
{
styles
.
countervalue
}
>
{
abbrev
(
channel
.
impressions
,
0
)}
<
/Text
>
<
/View
>
...
...
@@ -235,9 +235,10 @@ export default class ChannelHeader extends Component {
style
=
{
styles
.
nameTextInput
}
value
=
{
this
.
state
.
name
}
onChangeText
=
{
this
.
setName
}
testID
=
"
ChannelNameTextInput
"
/>
}
{
!
isEditable
&&
<
View
style
=
{{
flexDirection
:
'
row
'
,
alignItems
:
'
center
'
}}
>
<
View
style
=
{{
flexDirection
:
'
row
'
,
alignItems
:
'
center
'
}}
testID
=
"
ChannelNameView
"
>
<
Text
style
=
{
styles
.
name
}
ellipsizeMode
=
'
tail
'
...
...
This diff is collapsed.
src/channel/toolbar/Toolbar.js
View file @
75022227
...
...
@@ -77,19 +77,19 @@ class Toolbar extends Component {
return
(
<
View
style
=
{
styles
.
container
}
>
<
View
style
=
{
styles
.
topbar
}
>
<
TouchableOpacity
style
=
{
styles
.
button
}
onPress
=
{
this
.
filterFeed
}
>
<
TouchableOpacity
style
=
{
styles
.
button
}
onPress
=
{
this
.
filterFeed
}
testID
=
"
FeedButton
"
>
<
Icon
name
=
"
list
"
size
=
{
ICON_SIZE
}
color
=
{
filter
==
'
feed
'
?
colors
.
primary
:
color
}
style
=
{
styles
.
icon
}
/
>
<
Text
style
=
{[
styles
.
buttontext
,
filter
==
'
feed
'
?
styles
.
buttontextSelected
:
null
]}
>
{
i18n
.
t
(
'
feed
'
).
toUpperCase
()}
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
style
=
{
styles
.
button
}
onPress
=
{
this
.
filterImages
}
>
<
TouchableOpacity
style
=
{
styles
.
button
}
onPress
=
{
this
.
filterImages
}
testID
=
"
ImagesButton
"
>
<
IonIcon
name
=
"
md-image
"
size
=
{
ICON_SIZE
}
color
=
{
filter
==
'
images
'
?
colors
.
primary
:
color
}
style
=
{
styles
.
icon
}
/
>
<
Text
style
=
{[
styles
.
buttontext
,
filter
==
'
images
'
?
styles
.
buttontextSelected
:
null
]}
>
{
i18n
.
t
(
'
images
'
).
toUpperCase
()}
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
style
=
{
styles
.
button
}
onPress
=
{
this
.
filterVideos
}
>
<
TouchableOpacity
style
=
{
styles
.
button
}
onPress
=
{
this
.
filterVideos
}
testID
=
"
VideosButton
"
>
<
IonIcon
name
=
"
md-videocam
"
size
=
{
ICON_SIZE
}
color
=
{
filter
==
'
videos
'
?
colors
.
primary
:
color
}
style
=
{
styles
.
icon
}
/
>
<
Text
style
=
{[
styles
.
buttontext
,
filter
==
'
videos
'
?
styles
.
buttontextSelected
:
null
]}
>
{
i18n
.
t
(
'
videos
'
).
toUpperCase
()}
<
/Text
>
<
/TouchableOpacity
>
<
TouchableOpacity
style
=
{
styles
.
button
}
onPress
=
{
this
.
filterBlogs
}
>
<
TouchableOpacity
style
=
{
styles
.
button
}
onPress
=
{
this
.
filterBlogs
}
testID
=
"
BlogsButton
"
>
<
Icon
name
=
"
subject
"
size
=
{
ICON_SIZE
}
color
=
{
filter
==
'
blogs
'
?
colors
.
primary
:
color
}
style
=
{
styles
.
icon
}
/
>
<
Text
style
=
{[
styles
.
buttontext
,
filter
==
'
blogs
'
?
styles
.
buttontextSelected
:
null
]}
>
{
i18n
.
t
(
'
blogs.blogs
'
).
toUpperCase
()}
<
/Text
>
<
/TouchableOpacity
>
...
...
This diff is collapsed.
src/common/components/FeedList.js
View file @
75022227
...
...
@@ -144,7 +144,7 @@ export default class FeedList extends Component {
if
(
this
.
props
.
feedStore
.
loading
&&
!
this
.
props
.
feedStore
.
refreshing
){
return
(
<
View
style
=
{[
CS
.
centered
,
CS
.
padding3x
]}
>
<
View
style
=
{[
CS
.
centered
,
CS
.
padding3x
]}
testID
=
"
ActivityIndicatorView
"
>
<
ActivityIndicator
size
=
{
'
large
'
}
/
>
<
/View
>
);
...
...
This diff is collapsed.
src/newsfeed/activity/Activity.js
View file @
75022227
...
...
@@ -98,7 +98,7 @@ export default class Activity extends Component {
return
(
<
View
style
=
{[
styles
.
container
,
this
.
props
.
isReminded
?
null
:
CommonStyle
.
hairLineBottom
]}
onLayout
=
{
this
.
props
.
onLayout
}
>
<
View
style
=
{[
styles
.
container
,
this
.
props
.
isReminded
?
null
:
CommonStyle
.
hairLineBottom
]}
onLayout
=
{
this
.
props
.
onLayout
}
testID
=
"
ActivityView
"
>
<
Pinned
entity
=
{
this
.
props
.
entity
}
/
>
{
this
.
showOwner
()
}
{
lock
}
...
...
This diff is collapsed.
src/topbar/Topbar.js
View file @
75022227
...
...
@@ -54,7 +54,7 @@ export default class Topbar extends Component {
width
=
{
38
}
height
=
{
38
}
onPress
=
{()
=>
this
.
props
.
navigation
.
push
(
'
Channel
'
,
{
guid
:
this
.
props
.
user
.
me
.
guid
})}
{...
testID
(
'
topbar avatar button
'
)}
testID
=
"
AvatarButton
"
/>
}
<
/View
>
...
...
This diff is collapsed.
Please
register
or
sign in
to comment