Commit 170340e6b15f91e79cf683c892ec887c3115b317
1 parent
e868de68
Exists in
spb-stable
and in
3 other branches
Remove dir prefix and suffix from tests inside dir.
Showing
118 changed files
with
3317 additions
and
3317 deletions
Show diff stats
Too many changes.
To preserve performance only 100 of 118 files displayed.
... | ... | @@ -0,0 +1,39 @@ |
1 | +Feature: Project Archived | |
2 | + Background: | |
3 | + Given I sign in as a user | |
4 | + And I own project "Shop" | |
5 | + And I own project "Forum" | |
6 | + | |
7 | + Scenario: I should not see archived on project page of not-archive project | |
8 | + And project "Forum" is archived | |
9 | + And I visit project "Shop" page | |
10 | + Then I should not see "Archived" | |
11 | + | |
12 | + Scenario: I should see archived on project page of archive project | |
13 | + And project "Forum" is archived | |
14 | + And I visit project "Forum" page | |
15 | + Then I should see "Archived" | |
16 | + | |
17 | + Scenario: I should not see archived on projects page with no archived projects | |
18 | + And I visit dashboard projects page | |
19 | + Then I should not see "Archived" | |
20 | + | |
21 | + Scenario: I should see archived on projects page with archived projects | |
22 | + And project "Forum" is archived | |
23 | + And I visit dashboard projects page | |
24 | + Then I should see "Archived" | |
25 | + | |
26 | + Scenario: I archive project | |
27 | + When project "Shop" has push event | |
28 | + And I visit project "Shop" page | |
29 | + And I visit edit project "Shop" page | |
30 | + And I set project archived | |
31 | + Then I should see "Archived" | |
32 | + | |
33 | + Scenario: I unarchive project | |
34 | + When project "Shop" has push event | |
35 | + And project "Shop" is archived | |
36 | + And I visit project "Shop" page | |
37 | + And I visit edit project "Shop" page | |
38 | + And I set project unarchived | |
39 | + Then I should not see "Archived" | ... | ... |
features/project/archived_projects.feature
... | ... | @@ -1,39 +0,0 @@ |
1 | -Feature: Project Archived | |
2 | - Background: | |
3 | - Given I sign in as a user | |
4 | - And I own project "Shop" | |
5 | - And I own project "Forum" | |
6 | - | |
7 | - Scenario: I should not see archived on project page of not-archive project | |
8 | - And project "Forum" is archived | |
9 | - And I visit project "Shop" page | |
10 | - Then I should not see "Archived" | |
11 | - | |
12 | - Scenario: I should see archived on project page of archive project | |
13 | - And project "Forum" is archived | |
14 | - And I visit project "Forum" page | |
15 | - Then I should see "Archived" | |
16 | - | |
17 | - Scenario: I should not see archived on projects page with no archived projects | |
18 | - And I visit dashboard projects page | |
19 | - Then I should not see "Archived" | |
20 | - | |
21 | - Scenario: I should see archived on projects page with archived projects | |
22 | - And project "Forum" is archived | |
23 | - And I visit dashboard projects page | |
24 | - Then I should see "Archived" | |
25 | - | |
26 | - Scenario: I archive project | |
27 | - When project "Shop" has push event | |
28 | - And I visit project "Shop" page | |
29 | - And I visit edit project "Shop" page | |
30 | - And I set project archived | |
31 | - Then I should see "Archived" | |
32 | - | |
33 | - Scenario: I unarchive project | |
34 | - When project "Shop" has push event | |
35 | - And project "Shop" is archived | |
36 | - And I visit project "Shop" page | |
37 | - And I visit edit project "Shop" page | |
38 | - And I set project unarchived | |
39 | - Then I should not see "Archived" |
... | ... | @@ -0,0 +1,48 @@ |
1 | +Feature: Comments on commits | |
2 | + Background: | |
3 | + Given I sign in as a user | |
4 | + And I own project "Shop" | |
5 | + And I visit project commit page | |
6 | + | |
7 | + @javascript | |
8 | + Scenario: I can comment on a commit | |
9 | + Given I leave a comment like "XML attached" | |
10 | + Then I should see a comment saying "XML attached" | |
11 | + | |
12 | + @javascript | |
13 | + Scenario: I can't cancel the main form | |
14 | + Then I should not see the cancel comment button | |
15 | + | |
16 | + @javascript | |
17 | + Scenario: I can't preview without text | |
18 | + Given I haven't written any comment text | |
19 | + Then I should not see the comment preview button | |
20 | + | |
21 | + @javascript | |
22 | + Scenario: I can preview with text | |
23 | + Given I write a comment like "Nice" | |
24 | + Then I should see the comment preview button | |
25 | + | |
26 | + @javascript | |
27 | + Scenario: I preview a comment | |
28 | + Given I preview a comment text like "Bug fixed :smile:" | |
29 | + Then I should see the comment preview | |
30 | + And I should not see the comment text field | |
31 | + | |
32 | + @javascript | |
33 | + Scenario: I can edit after preview | |
34 | + Given I preview a comment text like "Bug fixed :smile:" | |
35 | + Then I should see the comment edit button | |
36 | + | |
37 | + @javascript | |
38 | + Scenario: I have a reset form after posting from preview | |
39 | + Given I preview a comment text like "Bug fixed :smile:" | |
40 | + And I submit the comment | |
41 | + Then I should see an empty comment text field | |
42 | + And I should not see the comment preview | |
43 | + | |
44 | + @javascript | |
45 | + Scenario: I can delete a comment | |
46 | + Given I leave a comment like "XML attached" | |
47 | + And I delete a comment | |
48 | + Then I should not see a comment saying "XML attached" | ... | ... |
features/project/commits/commit_comments.feature
... | ... | @@ -1,48 +0,0 @@ |
1 | -Feature: Comments on commits | |
2 | - Background: | |
3 | - Given I sign in as a user | |
4 | - And I own project "Shop" | |
5 | - And I visit project commit page | |
6 | - | |
7 | - @javascript | |
8 | - Scenario: I can comment on a commit | |
9 | - Given I leave a comment like "XML attached" | |
10 | - Then I should see a comment saying "XML attached" | |
11 | - | |
12 | - @javascript | |
13 | - Scenario: I can't cancel the main form | |
14 | - Then I should not see the cancel comment button | |
15 | - | |
16 | - @javascript | |
17 | - Scenario: I can't preview without text | |
18 | - Given I haven't written any comment text | |
19 | - Then I should not see the comment preview button | |
20 | - | |
21 | - @javascript | |
22 | - Scenario: I can preview with text | |
23 | - Given I write a comment like "Nice" | |
24 | - Then I should see the comment preview button | |
25 | - | |
26 | - @javascript | |
27 | - Scenario: I preview a comment | |
28 | - Given I preview a comment text like "Bug fixed :smile:" | |
29 | - Then I should see the comment preview | |
30 | - And I should not see the comment text field | |
31 | - | |
32 | - @javascript | |
33 | - Scenario: I can edit after preview | |
34 | - Given I preview a comment text like "Bug fixed :smile:" | |
35 | - Then I should see the comment edit button | |
36 | - | |
37 | - @javascript | |
38 | - Scenario: I have a reset form after posting from preview | |
39 | - Given I preview a comment text like "Bug fixed :smile:" | |
40 | - And I submit the comment | |
41 | - Then I should see an empty comment text field | |
42 | - And I should not see the comment preview | |
43 | - | |
44 | - @javascript | |
45 | - Scenario: I can delete a comment | |
46 | - Given I leave a comment like "XML attached" | |
47 | - And I delete a comment | |
48 | - Then I should not see a comment saying "XML attached" |
features/project/commits/commit_diff_comments.feature
... | ... | @@ -1,85 +0,0 @@ |
1 | -Feature: Comments on commit diffs | |
2 | - Background: | |
3 | - Given I sign in as a user | |
4 | - And I own project "Shop" | |
5 | - And I visit project commit page | |
6 | - | |
7 | - @javascript | |
8 | - Scenario: I can access add diff comment buttons | |
9 | - Then I should see add a diff comment button | |
10 | - | |
11 | - @javascript | |
12 | - Scenario: I can comment on a commit diff | |
13 | - Given I leave a diff comment like "Typo, please fix" | |
14 | - Then I should see a diff comment saying "Typo, please fix" | |
15 | - | |
16 | - @javascript | |
17 | - Scenario: I get a temporary form for the first comment on a diff line | |
18 | - Given I open a diff comment form | |
19 | - Then I should see a temporary diff comment form | |
20 | - | |
21 | - @javascript | |
22 | - Scenario: I have a cancel button on the diff form | |
23 | - Given I open a diff comment form | |
24 | - Then I should see the cancel comment button | |
25 | - | |
26 | - @javascript | |
27 | - Scenario: I can cancel a diff form | |
28 | - Given I open a diff comment form | |
29 | - And I cancel the diff comment | |
30 | - Then I should not see the diff comment form | |
31 | - | |
32 | - @javascript | |
33 | - Scenario: I can't open a second form for a diff line | |
34 | - Given I open a diff comment form | |
35 | - And I open a diff comment form | |
36 | - Then I should only see one diff form | |
37 | - | |
38 | - @javascript | |
39 | - Scenario: I can have multiple forms | |
40 | - Given I open a diff comment form | |
41 | - And I write a diff comment like ":-1: I don't like this" | |
42 | - And I open another diff comment form | |
43 | - Then I should see a diff comment form with ":-1: I don't like this" | |
44 | - And I should see an empty diff comment form | |
45 | - | |
46 | - @javascript | |
47 | - Scenario: I can preview multiple forms separately | |
48 | - Given I preview a diff comment text like "Should fix it :smile:" | |
49 | - And I preview another diff comment text like "DRY this up" | |
50 | - Then I should see two separate previews | |
51 | - | |
52 | - @javascript | |
53 | - Scenario: I have a reply button in discussions | |
54 | - Given I leave a diff comment like "Typo, please fix" | |
55 | - Then I should see a discussion reply button | |
56 | - | |
57 | - @javascript | |
58 | - Scenario: I can't preview without text | |
59 | - Given I open a diff comment form | |
60 | - And I haven't written any diff comment text | |
61 | - Then I should not see the diff comment preview button | |
62 | - | |
63 | - @javascript | |
64 | - Scenario: I can preview with text | |
65 | - Given I open a diff comment form | |
66 | - And I write a diff comment like ":-1: I don't like this" | |
67 | - Then I should see the diff comment preview button | |
68 | - | |
69 | - @javascript | |
70 | - Scenario: I preview a diff comment | |
71 | - Given I preview a diff comment text like "Should fix it :smile:" | |
72 | - Then I should see the diff comment preview | |
73 | - And I should not see the diff comment text field | |
74 | - | |
75 | - @javascript | |
76 | - Scenario: I can edit after preview | |
77 | - Given I preview a diff comment text like "Should fix it :smile:" | |
78 | - Then I should see the diff comment edit button | |
79 | - | |
80 | - @javascript | |
81 | - Scenario: The form gets removed after posting | |
82 | - Given I preview a diff comment text like "Should fix it :smile:" | |
83 | - And I submit the diff comment | |
84 | - Then I should not see the diff comment form | |
85 | - And I should see a discussion reply button |
features/project/commits/commits_user_lookup.feature
... | ... | @@ -1,14 +0,0 @@ |
1 | -Feature: Project Browse Commits User Lookup | |
2 | - Background: | |
3 | - Given I sign in as a user | |
4 | - And I own a project | |
5 | - And I have the user that authored the commits | |
6 | - And I visit my project's commits page | |
7 | - | |
8 | - Scenario: I browse commit from list | |
9 | - Given I click on commit link | |
10 | - Then I see commit info | |
11 | - | |
12 | - Scenario: I browse another commit from list | |
13 | - Given I click on another commit link | |
14 | - Then I see other commit info | |
15 | 0 | \ No newline at end of file |
... | ... | @@ -0,0 +1,85 @@ |
1 | +Feature: Comments on commit diffs | |
2 | + Background: | |
3 | + Given I sign in as a user | |
4 | + And I own project "Shop" | |
5 | + And I visit project commit page | |
6 | + | |
7 | + @javascript | |
8 | + Scenario: I can access add diff comment buttons | |
9 | + Then I should see add a diff comment button | |
10 | + | |
11 | + @javascript | |
12 | + Scenario: I can comment on a commit diff | |
13 | + Given I leave a diff comment like "Typo, please fix" | |
14 | + Then I should see a diff comment saying "Typo, please fix" | |
15 | + | |
16 | + @javascript | |
17 | + Scenario: I get a temporary form for the first comment on a diff line | |
18 | + Given I open a diff comment form | |
19 | + Then I should see a temporary diff comment form | |
20 | + | |
21 | + @javascript | |
22 | + Scenario: I have a cancel button on the diff form | |
23 | + Given I open a diff comment form | |
24 | + Then I should see the cancel comment button | |
25 | + | |
26 | + @javascript | |
27 | + Scenario: I can cancel a diff form | |
28 | + Given I open a diff comment form | |
29 | + And I cancel the diff comment | |
30 | + Then I should not see the diff comment form | |
31 | + | |
32 | + @javascript | |
33 | + Scenario: I can't open a second form for a diff line | |
34 | + Given I open a diff comment form | |
35 | + And I open a diff comment form | |
36 | + Then I should only see one diff form | |
37 | + | |
38 | + @javascript | |
39 | + Scenario: I can have multiple forms | |
40 | + Given I open a diff comment form | |
41 | + And I write a diff comment like ":-1: I don't like this" | |
42 | + And I open another diff comment form | |
43 | + Then I should see a diff comment form with ":-1: I don't like this" | |
44 | + And I should see an empty diff comment form | |
45 | + | |
46 | + @javascript | |
47 | + Scenario: I can preview multiple forms separately | |
48 | + Given I preview a diff comment text like "Should fix it :smile:" | |
49 | + And I preview another diff comment text like "DRY this up" | |
50 | + Then I should see two separate previews | |
51 | + | |
52 | + @javascript | |
53 | + Scenario: I have a reply button in discussions | |
54 | + Given I leave a diff comment like "Typo, please fix" | |
55 | + Then I should see a discussion reply button | |
56 | + | |
57 | + @javascript | |
58 | + Scenario: I can't preview without text | |
59 | + Given I open a diff comment form | |
60 | + And I haven't written any diff comment text | |
61 | + Then I should not see the diff comment preview button | |
62 | + | |
63 | + @javascript | |
64 | + Scenario: I can preview with text | |
65 | + Given I open a diff comment form | |
66 | + And I write a diff comment like ":-1: I don't like this" | |
67 | + Then I should see the diff comment preview button | |
68 | + | |
69 | + @javascript | |
70 | + Scenario: I preview a diff comment | |
71 | + Given I preview a diff comment text like "Should fix it :smile:" | |
72 | + Then I should see the diff comment preview | |
73 | + And I should not see the diff comment text field | |
74 | + | |
75 | + @javascript | |
76 | + Scenario: I can edit after preview | |
77 | + Given I preview a diff comment text like "Should fix it :smile:" | |
78 | + Then I should see the diff comment edit button | |
79 | + | |
80 | + @javascript | |
81 | + Scenario: The form gets removed after posting | |
82 | + Given I preview a diff comment text like "Should fix it :smile:" | |
83 | + And I submit the diff comment | |
84 | + Then I should not see the diff comment form | |
85 | + And I should see a discussion reply button | ... | ... |
... | ... | @@ -0,0 +1,14 @@ |
1 | +Feature: Project Browse Commits User Lookup | |
2 | + Background: | |
3 | + Given I sign in as a user | |
4 | + And I own a project | |
5 | + And I have the user that authored the commits | |
6 | + And I visit my project's commits page | |
7 | + | |
8 | + Scenario: I browse commit from list | |
9 | + Given I click on commit link | |
10 | + Then I see commit info | |
11 | + | |
12 | + Scenario: I browse another commit from list | |
13 | + Given I click on another commit link | |
14 | + Then I see other commit info | |
0 | 15 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,22 @@ |
1 | +Feature: Create Project | |
2 | + In order to get access to project sections | |
3 | + A user with ability to create a project | |
4 | + Should be able to create a new one | |
5 | + | |
6 | + Scenario: User create a project | |
7 | + Given I sign in as a user | |
8 | + When I visit new project page | |
9 | + And fill project form with valid data | |
10 | + Then I should see project page | |
11 | + And I should see empty project instuctions | |
12 | + | |
13 | + @javascript | |
14 | + Scenario: Empty project instructions | |
15 | + Given I sign in as a user | |
16 | + When I visit new project page | |
17 | + And fill project form with valid data | |
18 | + Then I see empty project instuctions | |
19 | + And I click on HTTP | |
20 | + Then Remote url should update to http link | |
21 | + And If I click on SSH | |
22 | + Then Remote url should update to ssh link | |
0 | 23 | \ No newline at end of file | ... | ... |
features/project/create_project.feature
... | ... | @@ -1,22 +0,0 @@ |
1 | -Feature: Create Project | |
2 | - In order to get access to project sections | |
3 | - A user with ability to create a project | |
4 | - Should be able to create a new one | |
5 | - | |
6 | - Scenario: User create a project | |
7 | - Given I sign in as a user | |
8 | - When I visit new project page | |
9 | - And fill project form with valid data | |
10 | - Then I should see project page | |
11 | - And I should see empty project instuctions | |
12 | - | |
13 | - @javascript | |
14 | - Scenario: Empty project instructions | |
15 | - Given I sign in as a user | |
16 | - When I visit new project page | |
17 | - And fill project form with valid data | |
18 | - Then I see empty project instuctions | |
19 | - And I click on HTTP | |
20 | - Then Remote url should update to http link | |
21 | - And If I click on SSH | |
22 | - Then Remote url should update to ssh link | |
23 | 0 | \ No newline at end of file |
... | ... | @@ -0,0 +1,14 @@ |
1 | +Feature: Fork Project | |
2 | + Background: | |
3 | + Given I sign in as a user | |
4 | + And I am a member of project "Shop" | |
5 | + When I visit project "Shop" page | |
6 | + | |
7 | + Scenario: User fork a project | |
8 | + Given I click link "Fork" | |
9 | + Then I should see the forked project page | |
10 | + | |
11 | + Scenario: User already has forked the project | |
12 | + Given I already have a project named "Shop" in my namespace | |
13 | + And I click link "Fork" | |
14 | + Then I should see a "Name has already been taken" warning | ... | ... |
features/project/fork_project.feature
... | ... | @@ -1,14 +0,0 @@ |
1 | -Feature: Fork Project | |
2 | - Background: | |
3 | - Given I sign in as a user | |
4 | - And I am a member of project "Shop" | |
5 | - When I visit project "Shop" page | |
6 | - | |
7 | - Scenario: User fork a project | |
8 | - Given I click link "Fork" | |
9 | - Then I should see the forked project page | |
10 | - | |
11 | - Scenario: User already has forked the project | |
12 | - Given I already have a project named "Shop" in my namespace | |
13 | - And I click link "Fork" | |
14 | - Then I should see a "Name has already been taken" warning |
features/project/public_projects.feature
... | ... | @@ -0,0 +1,101 @@ |
1 | +Feature: Public Projects Feature | |
2 | + Background: | |
3 | + Given public project "Community" | |
4 | + And internal project "Internal" | |
5 | + And private project "Enterprise" | |
6 | + | |
7 | + Scenario: I visit public area | |
8 | + When I visit the public projects area | |
9 | + Then I should see project "Community" | |
10 | + And I should not see project "Internal" | |
11 | + And I should not see project "Enterprise" | |
12 | + | |
13 | + Scenario: I visit public project page | |
14 | + When I visit project "Community" page | |
15 | + Then I should see project "Community" home page | |
16 | + | |
17 | + Scenario: I visit internal project page | |
18 | + When I visit project "Internal" page | |
19 | + Then I should be redirected to sign in page | |
20 | + | |
21 | + Scenario: I visit private project page | |
22 | + When I visit project "Enterprise" page | |
23 | + Then I should be redirected to sign in page | |
24 | + | |
25 | + Scenario: I visit an empty public project page | |
26 | + Given public empty project "Empty Public Project" | |
27 | + When I visit empty project page | |
28 | + Then I should see empty public project details | |
29 | + And I should see empty public project details with http clone info | |
30 | + | |
31 | + Scenario: I visit an empty public project page as user | |
32 | + Given I sign in as a user | |
33 | + And public empty project "Empty Public Project" | |
34 | + When I visit empty project page | |
35 | + Then I should see empty public project details | |
36 | + And I should see empty public project details with ssh clone info | |
37 | + | |
38 | + Scenario: I visit public area as user | |
39 | + Given I sign in as a user | |
40 | + When I visit the public projects area | |
41 | + Then I should see project "Community" | |
42 | + And I should see project "Internal" | |
43 | + And I should not see project "Enterprise" | |
44 | + | |
45 | + Scenario: I visit internal project page as user | |
46 | + Given I sign in as a user | |
47 | + When I visit project "Internal" page | |
48 | + Then I should see project "Internal" home page | |
49 | + | |
50 | + Scenario: I visit public project page | |
51 | + When I visit project "Community" page | |
52 | + Then I should see project "Community" home page | |
53 | + And I should see an http link to the repository | |
54 | + | |
55 | + Scenario: I visit public project page as user | |
56 | + Given I sign in as a user | |
57 | + When I visit project "Community" page | |
58 | + Then I should see project "Community" home page | |
59 | + And I should see an ssh link to the repository | |
60 | + | |
61 | + Scenario: I visit an empty public project page | |
62 | + Given public empty project "Empty Public Project" | |
63 | + When I visit empty project page | |
64 | + Then I should see empty public project details | |
65 | + | |
66 | + Scenario: I visit public project issues page as a non authorized user | |
67 | + Given I visit project "Community" page | |
68 | + And I visit "Community" issues page | |
69 | + Then I should see list of issues for "Community" project | |
70 | + | |
71 | + Scenario: I visit public project issues page as authorized user | |
72 | + Given I sign in as a user | |
73 | + Given I visit project "Community" page | |
74 | + And I visit "Community" issues page | |
75 | + Then I should see list of issues for "Community" project | |
76 | + | |
77 | + Scenario: I visit internal project issues page as authorized user | |
78 | + Given I sign in as a user | |
79 | + Given I visit project "Internal" page | |
80 | + And I visit "Internal" issues page | |
81 | + Then I should see list of issues for "Internal" project | |
82 | + | |
83 | + Scenario: I visit public project merge requests page as an authorized user | |
84 | + Given I sign in as a user | |
85 | + Given I visit project "Community" page | |
86 | + And I visit "Community" merge requests page | |
87 | + And project "Community" has "Bug fix" open merge request | |
88 | + Then I should see list of merge requests for "Community" project | |
89 | + | |
90 | + Scenario: I visit public project merge requests page as a non authorized user | |
91 | + Given I visit project "Community" page | |
92 | + And I visit "Community" merge requests page | |
93 | + And project "Community" has "Bug fix" open merge request | |
94 | + Then I should see list of merge requests for "Community" project | |
95 | + | |
96 | + Scenario: I visit internal project merge requests page as an authorized user | |
97 | + Given I sign in as a user | |
98 | + Given I visit project "Internal" page | |
99 | + And I visit "Internal" merge requests page | |
100 | + And project "Internal" has "Feature implemented" open merge request | |
101 | + Then I should see list of merge requests for "Internal" project | ... | ... |
features/public/public_projects.feature
... | ... | @@ -1,101 +0,0 @@ |
1 | -Feature: Public Projects Feature | |
2 | - Background: | |
3 | - Given public project "Community" | |
4 | - And internal project "Internal" | |
5 | - And private project "Enterprise" | |
6 | - | |
7 | - Scenario: I visit public area | |
8 | - When I visit the public projects area | |
9 | - Then I should see project "Community" | |
10 | - And I should not see project "Internal" | |
11 | - And I should not see project "Enterprise" | |
12 | - | |
13 | - Scenario: I visit public project page | |
14 | - When I visit project "Community" page | |
15 | - Then I should see project "Community" home page | |
16 | - | |
17 | - Scenario: I visit internal project page | |
18 | - When I visit project "Internal" page | |
19 | - Then I should be redirected to sign in page | |
20 | - | |
21 | - Scenario: I visit private project page | |
22 | - When I visit project "Enterprise" page | |
23 | - Then I should be redirected to sign in page | |
24 | - | |
25 | - Scenario: I visit an empty public project page | |
26 | - Given public empty project "Empty Public Project" | |
27 | - When I visit empty project page | |
28 | - Then I should see empty public project details | |
29 | - And I should see empty public project details with http clone info | |
30 | - | |
31 | - Scenario: I visit an empty public project page as user | |
32 | - Given I sign in as a user | |
33 | - And public empty project "Empty Public Project" | |
34 | - When I visit empty project page | |
35 | - Then I should see empty public project details | |
36 | - And I should see empty public project details with ssh clone info | |
37 | - | |
38 | - Scenario: I visit public area as user | |
39 | - Given I sign in as a user | |
40 | - When I visit the public projects area | |
41 | - Then I should see project "Community" | |
42 | - And I should see project "Internal" | |
43 | - And I should not see project "Enterprise" | |
44 | - | |
45 | - Scenario: I visit internal project page as user | |
46 | - Given I sign in as a user | |
47 | - When I visit project "Internal" page | |
48 | - Then I should see project "Internal" home page | |
49 | - | |
50 | - Scenario: I visit public project page | |
51 | - When I visit project "Community" page | |
52 | - Then I should see project "Community" home page | |
53 | - And I should see an http link to the repository | |
54 | - | |
55 | - Scenario: I visit public project page as user | |
56 | - Given I sign in as a user | |
57 | - When I visit project "Community" page | |
58 | - Then I should see project "Community" home page | |
59 | - And I should see an ssh link to the repository | |
60 | - | |
61 | - Scenario: I visit an empty public project page | |
62 | - Given public empty project "Empty Public Project" | |
63 | - When I visit empty project page | |
64 | - Then I should see empty public project details | |
65 | - | |
66 | - Scenario: I visit public project issues page as a non authorized user | |
67 | - Given I visit project "Community" page | |
68 | - And I visit "Community" issues page | |
69 | - Then I should see list of issues for "Community" project | |
70 | - | |
71 | - Scenario: I visit public project issues page as authorized user | |
72 | - Given I sign in as a user | |
73 | - Given I visit project "Community" page | |
74 | - And I visit "Community" issues page | |
75 | - Then I should see list of issues for "Community" project | |
76 | - | |
77 | - Scenario: I visit internal project issues page as authorized user | |
78 | - Given I sign in as a user | |
79 | - Given I visit project "Internal" page | |
80 | - And I visit "Internal" issues page | |
81 | - Then I should see list of issues for "Internal" project | |
82 | - | |
83 | - Scenario: I visit public project merge requests page as an authorized user | |
84 | - Given I sign in as a user | |
85 | - Given I visit project "Community" page | |
86 | - And I visit "Community" merge requests page | |
87 | - And project "Community" has "Bug fix" open merge request | |
88 | - Then I should see list of merge requests for "Community" project | |
89 | - | |
90 | - Scenario: I visit public project merge requests page as a non authorized user | |
91 | - Given I visit project "Community" page | |
92 | - And I visit "Community" merge requests page | |
93 | - And project "Community" has "Bug fix" open merge request | |
94 | - Then I should see list of merge requests for "Community" project | |
95 | - | |
96 | - Scenario: I visit internal project merge requests page as an authorized user | |
97 | - Given I sign in as a user | |
98 | - Given I visit project "Internal" page | |
99 | - And I visit "Internal" merge requests page | |
100 | - And project "Internal" has "Feature implemented" open merge request | |
101 | - Then I should see list of merge requests for "Internal" project |
... | ... | @@ -0,0 +1,10 @@ |
1 | +Feature: Discover Snippets | |
2 | + Background: | |
3 | + Given I sign in as a user | |
4 | + And I have public "Personal snippet one" snippet | |
5 | + And I have private "Personal snippet private" snippet | |
6 | + | |
7 | + Scenario: I should see snippets | |
8 | + Given I visit snippets page | |
9 | + Then I should see "Personal snippet one" in snippets | |
10 | + And I should not see "Personal snippet private" in snippets | ... | ... |
features/snippets/discover_snippets.feature
... | ... | @@ -1,10 +0,0 @@ |
1 | -Feature: Discover Snippets | |
2 | - Background: | |
3 | - Given I sign in as a user | |
4 | - And I have public "Personal snippet one" snippet | |
5 | - And I have private "Personal snippet private" snippet | |
6 | - | |
7 | - Scenario: I should see snippets | |
8 | - Given I visit snippets page | |
9 | - Then I should see "Personal snippet one" in snippets | |
10 | - And I should not see "Personal snippet private" in snippets |
... | ... | @@ -0,0 +1,22 @@ |
1 | +Feature: User Snippets | |
2 | + Background: | |
3 | + Given I sign in as a user | |
4 | + And I have public "Personal snippet one" snippet | |
5 | + And I have private "Personal snippet private" snippet | |
6 | + | |
7 | + Scenario: I should see all my snippets | |
8 | + Given I visit my snippets page | |
9 | + Then I should see "Personal snippet one" in snippets | |
10 | + And I should see "Personal snippet private" in snippets | |
11 | + | |
12 | + Scenario: I can see only my private snippets | |
13 | + Given I visit my snippets page | |
14 | + And I click "Private" filter | |
15 | + Then I should not see "Personal snippet one" in snippets | |
16 | + And I should see "Personal snippet private" in snippets | |
17 | + | |
18 | + Scenario: I can see only my public snippets | |
19 | + Given I visit my snippets page | |
20 | + And I click "Public" filter | |
21 | + Then I should see "Personal snippet one" in snippets | |
22 | + And I should not see "Personal snippet private" in snippets | ... | ... |
features/snippets/user_snippets.feature
... | ... | @@ -1,22 +0,0 @@ |
1 | -Feature: User Snippets | |
2 | - Background: | |
3 | - Given I sign in as a user | |
4 | - And I have public "Personal snippet one" snippet | |
5 | - And I have private "Personal snippet private" snippet | |
6 | - | |
7 | - Scenario: I should see all my snippets | |
8 | - Given I visit my snippets page | |
9 | - Then I should see "Personal snippet one" in snippets | |
10 | - And I should see "Personal snippet private" in snippets | |
11 | - | |
12 | - Scenario: I can see only my private snippets | |
13 | - Given I visit my snippets page | |
14 | - And I click "Private" filter | |
15 | - Then I should not see "Personal snippet one" in snippets | |
16 | - And I should see "Personal snippet private" in snippets | |
17 | - | |
18 | - Scenario: I can see only my public snippets | |
19 | - Given I visit my snippets page | |
20 | - And I click "Public" filter | |
21 | - Then I should see "Personal snippet one" in snippets | |
22 | - And I should not see "Personal snippet private" in snippets |
... | ... | @@ -0,0 +1,37 @@ |
1 | +class AdminActiveTab < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedActiveTab | |
5 | + | |
6 | + Then 'the active main tab should be Home' do | |
7 | + ensure_active_main_tab('Home') | |
8 | + end | |
9 | + | |
10 | + Then 'the active main tab should be Projects' do | |
11 | + ensure_active_main_tab('Projects') | |
12 | + end | |
13 | + | |
14 | + Then 'the active main tab should be Groups' do | |
15 | + ensure_active_main_tab('Groups') | |
16 | + end | |
17 | + | |
18 | + Then 'the active main tab should be Users' do | |
19 | + ensure_active_main_tab('Users') | |
20 | + end | |
21 | + | |
22 | + Then 'the active main tab should be Logs' do | |
23 | + ensure_active_main_tab('Logs') | |
24 | + end | |
25 | + | |
26 | + Then 'the active main tab should be Hooks' do | |
27 | + ensure_active_main_tab('Hooks') | |
28 | + end | |
29 | + | |
30 | + Then 'the active main tab should be Resque' do | |
31 | + ensure_active_main_tab('Background Jobs') | |
32 | + end | |
33 | + | |
34 | + Then 'the active main tab should be Messages' do | |
35 | + ensure_active_main_tab('Messages') | |
36 | + end | |
37 | +end | ... | ... |
features/steps/admin/admin_active_tab.rb
... | ... | @@ -1,37 +0,0 @@ |
1 | -class AdminActiveTab < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedActiveTab | |
5 | - | |
6 | - Then 'the active main tab should be Home' do | |
7 | - ensure_active_main_tab('Home') | |
8 | - end | |
9 | - | |
10 | - Then 'the active main tab should be Projects' do | |
11 | - ensure_active_main_tab('Projects') | |
12 | - end | |
13 | - | |
14 | - Then 'the active main tab should be Groups' do | |
15 | - ensure_active_main_tab('Groups') | |
16 | - end | |
17 | - | |
18 | - Then 'the active main tab should be Users' do | |
19 | - ensure_active_main_tab('Users') | |
20 | - end | |
21 | - | |
22 | - Then 'the active main tab should be Logs' do | |
23 | - ensure_active_main_tab('Logs') | |
24 | - end | |
25 | - | |
26 | - Then 'the active main tab should be Hooks' do | |
27 | - ensure_active_main_tab('Hooks') | |
28 | - end | |
29 | - | |
30 | - Then 'the active main tab should be Resque' do | |
31 | - ensure_active_main_tab('Background Jobs') | |
32 | - end | |
33 | - | |
34 | - Then 'the active main tab should be Messages' do | |
35 | - ensure_active_main_tab('Messages') | |
36 | - end | |
37 | -end |
features/steps/admin/admin_broadcast_messages.rb
... | ... | @@ -1,41 +0,0 @@ |
1 | -class Spinach::Features::AdminBroadcastMessages < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedAdmin | |
5 | - | |
6 | - step 'application already has admin messages' do | |
7 | - FactoryGirl.create(:broadcast_message, message: "Migration to new server") | |
8 | - end | |
9 | - | |
10 | - step 'I should be all broadcast messages' do | |
11 | - page.should have_content "Migration to new server" | |
12 | - end | |
13 | - | |
14 | - step 'submit form with new broadcast message' do | |
15 | - fill_in 'broadcast_message_message', with: 'Application update from 4:00 CST to 5:00 CST' | |
16 | - select '2018', from: "broadcast_message_ends_at_1i" | |
17 | - click_button "Add broadcast message" | |
18 | - end | |
19 | - | |
20 | - step 'I should be redirected to admin messages page' do | |
21 | - current_path.should == admin_broadcast_messages_path | |
22 | - end | |
23 | - | |
24 | - step 'I should see newly created broadcast message' do | |
25 | - page.should have_content 'Application update from 4:00 CST to 5:00 CST' | |
26 | - end | |
27 | - | |
28 | - step 'submit form with new customized broadcast message' do | |
29 | - fill_in 'broadcast_message_message', with: 'Application update from 4:00 CST to 5:00 CST' | |
30 | - click_link "Customize colors" | |
31 | - fill_in 'broadcast_message_color', with: '#f2dede' | |
32 | - fill_in 'broadcast_message_font', with: '#b94a48' | |
33 | - select '2018', from: "broadcast_message_ends_at_1i" | |
34 | - click_button "Add broadcast message" | |
35 | - end | |
36 | - | |
37 | - step 'I should see a customized broadcast message' do | |
38 | - page.should have_content 'Application update from 4:00 CST to 5:00 CST' | |
39 | - page.should have_selector %(div[style="background-color:#f2dede;color:#b94a48"]) | |
40 | - end | |
41 | -end |
features/steps/admin/admin_groups.rb
... | ... | @@ -1,66 +0,0 @@ |
1 | -class AdminGroups < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedUser | |
5 | - include SharedActiveTab | |
6 | - include Select2Helper | |
7 | - | |
8 | - When 'I visit admin group page' do | |
9 | - visit admin_group_path(current_group) | |
10 | - end | |
11 | - | |
12 | - When 'I click new group link' do | |
13 | - click_link "New Group" | |
14 | - end | |
15 | - | |
16 | - And 'I have group with projects' do | |
17 | - @group = create(:group) | |
18 | - @project = create(:project, group: @group) | |
19 | - @event = create(:closed_issue_event, project: @project) | |
20 | - | |
21 | - @project.team << [current_user, :master] | |
22 | - end | |
23 | - | |
24 | - And 'submit form with new group info' do | |
25 | - fill_in 'group_name', with: 'gitlab' | |
26 | - fill_in 'group_description', with: 'Group description' | |
27 | - click_button "Create group" | |
28 | - end | |
29 | - | |
30 | - Then 'I should see newly created group' do | |
31 | - page.should have_content "Group: gitlab" | |
32 | - page.should have_content "Group description" | |
33 | - end | |
34 | - | |
35 | - Then 'I should be redirected to group page' do | |
36 | - current_path.should == admin_group_path(Group.last) | |
37 | - end | |
38 | - | |
39 | - When 'I select user "John Doe" from user list as "Reporter"' do | |
40 | - user = User.find_by(name: "John Doe") | |
41 | - select2(user.id, from: "#user_ids", multiple: true) | |
42 | - within "#new_team_member" do | |
43 | - select "Reporter", from: "group_access" | |
44 | - end | |
45 | - click_button "Add users into group" | |
46 | - end | |
47 | - | |
48 | - Then 'I should see "John Doe" in team list in every project as "Reporter"' do | |
49 | - within ".group-users-list" do | |
50 | - page.should have_content "John Doe" | |
51 | - page.should have_content "Reporter" | |
52 | - end | |
53 | - end | |
54 | - | |
55 | - step 'I should be all groups' do | |
56 | - Group.all.each do |group| | |
57 | - page.should have_content group.name | |
58 | - end | |
59 | - end | |
60 | - | |
61 | - protected | |
62 | - | |
63 | - def current_group | |
64 | - @group ||= Group.first | |
65 | - end | |
66 | -end |
features/steps/admin/admin_logs.rb
... | ... | @@ -1,11 +0,0 @@ |
1 | -class AdminLogs < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedAdmin | |
5 | - | |
6 | - Then 'I should see tabs with available logs' do | |
7 | - page.should have_content 'production.log' | |
8 | - page.should have_content 'githost.log' | |
9 | - page.should have_content 'application.log' | |
10 | - end | |
11 | -end |
features/steps/admin/admin_projects.rb
... | ... | @@ -1,22 +0,0 @@ |
1 | -class AdminProjects < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedAdmin | |
5 | - | |
6 | - And 'I should see all projects' do | |
7 | - Project.all.each do |p| | |
8 | - page.should have_content p.name_with_namespace | |
9 | - end | |
10 | - end | |
11 | - | |
12 | - And 'I click on first project' do | |
13 | - click_link Project.first.name_with_namespace | |
14 | - end | |
15 | - | |
16 | - Then 'I should see project details' do | |
17 | - project = Project.first | |
18 | - current_path.should == admin_project_path(project) | |
19 | - page.should have_content(project.name_with_namespace) | |
20 | - page.should have_content(project.creator.name) | |
21 | - end | |
22 | -end |
features/steps/admin/admin_users.rb
... | ... | @@ -1,34 +0,0 @@ |
1 | -class AdminUsers < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedAdmin | |
5 | - | |
6 | - Then 'I should see all users' do | |
7 | - User.all.each do |user| | |
8 | - page.should have_content user.name | |
9 | - end | |
10 | - end | |
11 | - | |
12 | - And 'Click edit' do | |
13 | - @user = User.first | |
14 | - find("#edit_user_#{@user.id}").click | |
15 | - end | |
16 | - | |
17 | - And 'Input non ascii char in username' do | |
18 | - fill_in 'user_username', with: "\u3042\u3044" | |
19 | - end | |
20 | - | |
21 | - And 'Click save' do | |
22 | - click_button("Save") | |
23 | - end | |
24 | - | |
25 | - Then 'See username error message' do | |
26 | - within "#error_explanation" do | |
27 | - page.should have_content "Username" | |
28 | - end | |
29 | - end | |
30 | - | |
31 | - And 'Not changed form action url' do | |
32 | - page.should have_selector %(form[action="/admin/users/#{@user.username}"]) | |
33 | - end | |
34 | -end |
... | ... | @@ -0,0 +1,41 @@ |
1 | +class Spinach::Features::AdminBroadcastMessages < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedAdmin | |
5 | + | |
6 | + step 'application already has admin messages' do | |
7 | + FactoryGirl.create(:broadcast_message, message: "Migration to new server") | |
8 | + end | |
9 | + | |
10 | + step 'I should be all broadcast messages' do | |
11 | + page.should have_content "Migration to new server" | |
12 | + end | |
13 | + | |
14 | + step 'submit form with new broadcast message' do | |
15 | + fill_in 'broadcast_message_message', with: 'Application update from 4:00 CST to 5:00 CST' | |
16 | + select '2018', from: "broadcast_message_ends_at_1i" | |
17 | + click_button "Add broadcast message" | |
18 | + end | |
19 | + | |
20 | + step 'I should be redirected to admin messages page' do | |
21 | + current_path.should == admin_broadcast_messages_path | |
22 | + end | |
23 | + | |
24 | + step 'I should see newly created broadcast message' do | |
25 | + page.should have_content 'Application update from 4:00 CST to 5:00 CST' | |
26 | + end | |
27 | + | |
28 | + step 'submit form with new customized broadcast message' do | |
29 | + fill_in 'broadcast_message_message', with: 'Application update from 4:00 CST to 5:00 CST' | |
30 | + click_link "Customize colors" | |
31 | + fill_in 'broadcast_message_color', with: '#f2dede' | |
32 | + fill_in 'broadcast_message_font', with: '#b94a48' | |
33 | + select '2018', from: "broadcast_message_ends_at_1i" | |
34 | + click_button "Add broadcast message" | |
35 | + end | |
36 | + | |
37 | + step 'I should see a customized broadcast message' do | |
38 | + page.should have_content 'Application update from 4:00 CST to 5:00 CST' | |
39 | + page.should have_selector %(div[style="background-color:#f2dede;color:#b94a48"]) | |
40 | + end | |
41 | +end | ... | ... |
... | ... | @@ -0,0 +1,66 @@ |
1 | +class AdminGroups < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedUser | |
5 | + include SharedActiveTab | |
6 | + include Select2Helper | |
7 | + | |
8 | + When 'I visit admin group page' do | |
9 | + visit admin_group_path(current_group) | |
10 | + end | |
11 | + | |
12 | + When 'I click new group link' do | |
13 | + click_link "New Group" | |
14 | + end | |
15 | + | |
16 | + And 'I have group with projects' do | |
17 | + @group = create(:group) | |
18 | + @project = create(:project, group: @group) | |
19 | + @event = create(:closed_issue_event, project: @project) | |
20 | + | |
21 | + @project.team << [current_user, :master] | |
22 | + end | |
23 | + | |
24 | + And 'submit form with new group info' do | |
25 | + fill_in 'group_name', with: 'gitlab' | |
26 | + fill_in 'group_description', with: 'Group description' | |
27 | + click_button "Create group" | |
28 | + end | |
29 | + | |
30 | + Then 'I should see newly created group' do | |
31 | + page.should have_content "Group: gitlab" | |
32 | + page.should have_content "Group description" | |
33 | + end | |
34 | + | |
35 | + Then 'I should be redirected to group page' do | |
36 | + current_path.should == admin_group_path(Group.last) | |
37 | + end | |
38 | + | |
39 | + When 'I select user "John Doe" from user list as "Reporter"' do | |
40 | + user = User.find_by(name: "John Doe") | |
41 | + select2(user.id, from: "#user_ids", multiple: true) | |
42 | + within "#new_team_member" do | |
43 | + select "Reporter", from: "group_access" | |
44 | + end | |
45 | + click_button "Add users into group" | |
46 | + end | |
47 | + | |
48 | + Then 'I should see "John Doe" in team list in every project as "Reporter"' do | |
49 | + within ".group-users-list" do | |
50 | + page.should have_content "John Doe" | |
51 | + page.should have_content "Reporter" | |
52 | + end | |
53 | + end | |
54 | + | |
55 | + step 'I should be all groups' do | |
56 | + Group.all.each do |group| | |
57 | + page.should have_content group.name | |
58 | + end | |
59 | + end | |
60 | + | |
61 | + protected | |
62 | + | |
63 | + def current_group | |
64 | + @group ||= Group.first | |
65 | + end | |
66 | +end | ... | ... |
... | ... | @@ -0,0 +1,11 @@ |
1 | +class AdminLogs < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedAdmin | |
5 | + | |
6 | + Then 'I should see tabs with available logs' do | |
7 | + page.should have_content 'production.log' | |
8 | + page.should have_content 'githost.log' | |
9 | + page.should have_content 'application.log' | |
10 | + end | |
11 | +end | ... | ... |
... | ... | @@ -0,0 +1,22 @@ |
1 | +class AdminProjects < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedAdmin | |
5 | + | |
6 | + And 'I should see all projects' do | |
7 | + Project.all.each do |p| | |
8 | + page.should have_content p.name_with_namespace | |
9 | + end | |
10 | + end | |
11 | + | |
12 | + And 'I click on first project' do | |
13 | + click_link Project.first.name_with_namespace | |
14 | + end | |
15 | + | |
16 | + Then 'I should see project details' do | |
17 | + project = Project.first | |
18 | + current_path.should == admin_project_path(project) | |
19 | + page.should have_content(project.name_with_namespace) | |
20 | + page.should have_content(project.creator.name) | |
21 | + end | |
22 | +end | ... | ... |
... | ... | @@ -0,0 +1,34 @@ |
1 | +class AdminUsers < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedAdmin | |
5 | + | |
6 | + Then 'I should see all users' do | |
7 | + User.all.each do |user| | |
8 | + page.should have_content user.name | |
9 | + end | |
10 | + end | |
11 | + | |
12 | + And 'Click edit' do | |
13 | + @user = User.first | |
14 | + find("#edit_user_#{@user.id}").click | |
15 | + end | |
16 | + | |
17 | + And 'Input non ascii char in username' do | |
18 | + fill_in 'user_username', with: "\u3042\u3044" | |
19 | + end | |
20 | + | |
21 | + And 'Click save' do | |
22 | + click_button("Save") | |
23 | + end | |
24 | + | |
25 | + Then 'See username error message' do | |
26 | + within "#error_explanation" do | |
27 | + page.should have_content "Username" | |
28 | + end | |
29 | + end | |
30 | + | |
31 | + And 'Not changed form action url' do | |
32 | + page.should have_selector %(form[action="/admin/users/#{@user.username}"]) | |
33 | + end | |
34 | +end | ... | ... |
... | ... | @@ -0,0 +1,21 @@ |
1 | +class DashboardActiveTab < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedActiveTab | |
5 | + | |
6 | + Then 'the active main tab should be Home' do | |
7 | + ensure_active_main_tab('Home') | |
8 | + end | |
9 | + | |
10 | + Then 'the active main tab should be Issues' do | |
11 | + ensure_active_main_tab('Issues') | |
12 | + end | |
13 | + | |
14 | + Then 'the active main tab should be Merge Requests' do | |
15 | + ensure_active_main_tab('Merge Requests') | |
16 | + end | |
17 | + | |
18 | + Then 'the active main tab should be Help' do | |
19 | + ensure_active_main_tab('Help') | |
20 | + end | |
21 | +end | ... | ... |
features/steps/dashboard/dashboard_active_tab.rb
... | ... | @@ -1,21 +0,0 @@ |
1 | -class DashboardActiveTab < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedActiveTab | |
5 | - | |
6 | - Then 'the active main tab should be Home' do | |
7 | - ensure_active_main_tab('Home') | |
8 | - end | |
9 | - | |
10 | - Then 'the active main tab should be Issues' do | |
11 | - ensure_active_main_tab('Issues') | |
12 | - end | |
13 | - | |
14 | - Then 'the active main tab should be Merge Requests' do | |
15 | - ensure_active_main_tab('Merge Requests') | |
16 | - end | |
17 | - | |
18 | - Then 'the active main tab should be Help' do | |
19 | - ensure_active_main_tab('Help') | |
20 | - end | |
21 | -end |
features/steps/dashboard/dashboard_event_filters.rb
... | ... | @@ -1,87 +0,0 @@ |
1 | -class EventFilters < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedProject | |
5 | - | |
6 | - Then 'I should see push event' do | |
7 | - page.should have_selector('span.pushed') | |
8 | - end | |
9 | - | |
10 | - Then 'I should not see push event' do | |
11 | - page.should_not have_selector('span.pushed') | |
12 | - end | |
13 | - | |
14 | - Then 'I should see new member event' do | |
15 | - page.should have_selector('span.joined') | |
16 | - end | |
17 | - | |
18 | - And 'I should not see new member event' do | |
19 | - page.should_not have_selector('span.joined') | |
20 | - end | |
21 | - | |
22 | - Then 'I should see merge request event' do | |
23 | - page.should have_selector('span.accepted') | |
24 | - end | |
25 | - | |
26 | - And 'I should not see merge request event' do | |
27 | - page.should_not have_selector('span.accepted') | |
28 | - end | |
29 | - | |
30 | - And 'this project has push event' do | |
31 | - data = { | |
32 | - before: "0000000000000000000000000000000000000000", | |
33 | - after: "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", | |
34 | - ref: "refs/heads/new_design", | |
35 | - user_id: @user.id, | |
36 | - user_name: @user.name, | |
37 | - repository: { | |
38 | - name: @project.name, | |
39 | - url: "localhost/rubinius", | |
40 | - description: "", | |
41 | - homepage: "localhost/rubinius", | |
42 | - private: true | |
43 | - } | |
44 | - } | |
45 | - | |
46 | - @event = Event.create( | |
47 | - project: @project, | |
48 | - action: Event::PUSHED, | |
49 | - data: data, | |
50 | - author_id: @user.id | |
51 | - ) | |
52 | - end | |
53 | - | |
54 | - And 'this project has new member event' do | |
55 | - user = create(:user, {name: "John Doe"}) | |
56 | - Event.create( | |
57 | - project: @project, | |
58 | - author_id: user.id, | |
59 | - action: Event::JOINED | |
60 | - ) | |
61 | - end | |
62 | - | |
63 | - And 'this project has merge request event' do | |
64 | - merge_request = create :merge_request, author: @user, source_project: @project, target_project: @project | |
65 | - Event.create( | |
66 | - project: @project, | |
67 | - action: Event::MERGED, | |
68 | - target_id: merge_request.id, | |
69 | - target_type: "MergeRequest", | |
70 | - author_id: @user.id | |
71 | - ) | |
72 | - end | |
73 | - | |
74 | - When 'I click "push" event filter' do | |
75 | - click_link("push_event_filter") | |
76 | - end | |
77 | - | |
78 | - When 'I click "team" event filter' do | |
79 | - click_link("team_event_filter") | |
80 | - end | |
81 | - | |
82 | - When 'I click "merge" event filter' do | |
83 | - click_link("merged_event_filter") | |
84 | - end | |
85 | - | |
86 | -end | |
87 | - |
features/steps/dashboard/dashboard_issues.rb
... | ... | @@ -1,74 +0,0 @@ |
1 | -class DashboardIssues < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - | |
5 | - step 'I should see issues assigned to me' do | |
6 | - should_see(assigned_issue) | |
7 | - should_not_see(authored_issue) | |
8 | - should_not_see(other_issue) | |
9 | - end | |
10 | - | |
11 | - step 'I should see issues authored by me' do | |
12 | - should_see(authored_issue) | |
13 | - should_not_see(assigned_issue) | |
14 | - should_not_see(other_issue) | |
15 | - end | |
16 | - | |
17 | - step 'I should see all issues' do | |
18 | - should_see(authored_issue) | |
19 | - should_see(assigned_issue) | |
20 | - should_see(other_issue) | |
21 | - end | |
22 | - | |
23 | - step 'I have authored issues' do | |
24 | - authored_issue | |
25 | - end | |
26 | - | |
27 | - step 'I have assigned issues' do | |
28 | - assigned_issue | |
29 | - end | |
30 | - | |
31 | - step 'I have other issues' do | |
32 | - other_issue | |
33 | - end | |
34 | - | |
35 | - step 'I click "Authored by me" link' do | |
36 | - within ".scope-filter" do | |
37 | - click_link 'Created by me' | |
38 | - end | |
39 | - end | |
40 | - | |
41 | - step 'I click "All" link' do | |
42 | - within ".scope-filter" do | |
43 | - click_link "Everyone's" | |
44 | - end | |
45 | - end | |
46 | - | |
47 | - def should_see(issue) | |
48 | - page.should have_content(issue.title[0..10]) | |
49 | - end | |
50 | - | |
51 | - def should_not_see(issue) | |
52 | - page.should_not have_content(issue.title[0..10]) | |
53 | - end | |
54 | - | |
55 | - def assigned_issue | |
56 | - @assigned_issue ||= create :issue, assignee: current_user, project: project | |
57 | - end | |
58 | - | |
59 | - def authored_issue | |
60 | - @authored_issue ||= create :issue, author: current_user, project: project | |
61 | - end | |
62 | - | |
63 | - def other_issue | |
64 | - @other_issue ||= create :issue, project: project | |
65 | - end | |
66 | - | |
67 | - def project | |
68 | - @project ||= begin | |
69 | - project =create :project | |
70 | - project.team << [current_user, :master] | |
71 | - project | |
72 | - end | |
73 | - end | |
74 | -end |
features/steps/dashboard/dashboard_merge_requests.rb
... | ... | @@ -1,74 +0,0 @@ |
1 | -class DashboardMergeRequests < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - | |
5 | - step 'I should see merge requests assigned to me' do | |
6 | - should_see(assigned_merge_request) | |
7 | - should_not_see(authored_merge_request) | |
8 | - should_not_see(other_merge_request) | |
9 | - end | |
10 | - | |
11 | - step 'I should see merge requests authored by me' do | |
12 | - should_see(authored_merge_request) | |
13 | - should_not_see(assigned_merge_request) | |
14 | - should_not_see(other_merge_request) | |
15 | - end | |
16 | - | |
17 | - step 'I should see all merge requests' do | |
18 | - should_see(authored_merge_request) | |
19 | - should_see(assigned_merge_request) | |
20 | - should_see(other_merge_request) | |
21 | - end | |
22 | - | |
23 | - step 'I have authored merge requests' do | |
24 | - authored_merge_request | |
25 | - end | |
26 | - | |
27 | - step 'I have assigned merge requests' do | |
28 | - assigned_merge_request | |
29 | - end | |
30 | - | |
31 | - step 'I have other merge requests' do | |
32 | - other_merge_request | |
33 | - end | |
34 | - | |
35 | - step 'I click "Authored by me" link' do | |
36 | - within ".scope-filter" do | |
37 | - click_link 'Created by me' | |
38 | - end | |
39 | - end | |
40 | - | |
41 | - step 'I click "All" link' do | |
42 | - within ".scope-filter" do | |
43 | - click_link "Everyone's" | |
44 | - end | |
45 | - end | |
46 | - | |
47 | - def should_see(merge_request) | |
48 | - page.should have_content(merge_request.title[0..10]) | |
49 | - end | |
50 | - | |
51 | - def should_not_see(merge_request) | |
52 | - page.should_not have_content(merge_request.title[0..10]) | |
53 | - end | |
54 | - | |
55 | - def assigned_merge_request | |
56 | - @assigned_merge_request ||= create :merge_request, assignee: current_user, target_project: project | |
57 | - end | |
58 | - | |
59 | - def authored_merge_request | |
60 | - @authored_merge_request ||= create :merge_request, author: current_user, target_project: project | |
61 | - end | |
62 | - | |
63 | - def other_merge_request | |
64 | - @other_merge_request ||= create :merge_request, target_project: project | |
65 | - end | |
66 | - | |
67 | - def project | |
68 | - @project ||= begin | |
69 | - project =create :project | |
70 | - project.team << [current_user, :master] | |
71 | - project | |
72 | - end | |
73 | - end | |
74 | -end |
features/steps/dashboard/dashboard_projects.rb
... | ... | @@ -1,11 +0,0 @@ |
1 | -class DashboardProjects < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedProject | |
5 | - | |
6 | - Then 'I should see projects list' do | |
7 | - @user.authorized_projects.all.each do |project| | |
8 | - page.should have_link project.name_with_namespace | |
9 | - end | |
10 | - end | |
11 | -end |
features/steps/dashboard/dashboard_search.rb
... | ... | @@ -1,19 +0,0 @@ |
1 | -class DashboardSearch < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedProject | |
5 | - | |
6 | - Given 'I search for "Sho"' do | |
7 | - fill_in "dashboard_search", with: "Sho" | |
8 | - click_button "Search" | |
9 | - end | |
10 | - | |
11 | - Then 'I should see "Shop" project link' do | |
12 | - page.should have_link "Shop" | |
13 | - end | |
14 | - | |
15 | - Given 'I search for "Contibuting"' do | |
16 | - fill_in "dashboard_search", with: "Contibuting" | |
17 | - click_button "Search" | |
18 | - end | |
19 | -end |
features/steps/dashboard/dashboard_with_archived_projects.rb
... | ... | @@ -1,22 +0,0 @@ |
1 | -class DashboardWithArchivedProjects < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedProject | |
5 | - | |
6 | - When 'project "Forum" is archived' do | |
7 | - project = Project.find_by(name: "Forum") | |
8 | - project.update_attribute(:archived, true) | |
9 | - end | |
10 | - | |
11 | - Then 'I should see "Shop" project link' do | |
12 | - page.should have_link "Shop" | |
13 | - end | |
14 | - | |
15 | - Then 'I should not see "Forum" project link' do | |
16 | - page.should_not have_link "Forum" | |
17 | - end | |
18 | - | |
19 | - Then 'I should see "Forum" project link' do | |
20 | - page.should have_link "Forum" | |
21 | - end | |
22 | -end |
... | ... | @@ -0,0 +1,87 @@ |
1 | +class EventFilters < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedProject | |
5 | + | |
6 | + Then 'I should see push event' do | |
7 | + page.should have_selector('span.pushed') | |
8 | + end | |
9 | + | |
10 | + Then 'I should not see push event' do | |
11 | + page.should_not have_selector('span.pushed') | |
12 | + end | |
13 | + | |
14 | + Then 'I should see new member event' do | |
15 | + page.should have_selector('span.joined') | |
16 | + end | |
17 | + | |
18 | + And 'I should not see new member event' do | |
19 | + page.should_not have_selector('span.joined') | |
20 | + end | |
21 | + | |
22 | + Then 'I should see merge request event' do | |
23 | + page.should have_selector('span.accepted') | |
24 | + end | |
25 | + | |
26 | + And 'I should not see merge request event' do | |
27 | + page.should_not have_selector('span.accepted') | |
28 | + end | |
29 | + | |
30 | + And 'this project has push event' do | |
31 | + data = { | |
32 | + before: "0000000000000000000000000000000000000000", | |
33 | + after: "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", | |
34 | + ref: "refs/heads/new_design", | |
35 | + user_id: @user.id, | |
36 | + user_name: @user.name, | |
37 | + repository: { | |
38 | + name: @project.name, | |
39 | + url: "localhost/rubinius", | |
40 | + description: "", | |
41 | + homepage: "localhost/rubinius", | |
42 | + private: true | |
43 | + } | |
44 | + } | |
45 | + | |
46 | + @event = Event.create( | |
47 | + project: @project, | |
48 | + action: Event::PUSHED, | |
49 | + data: data, | |
50 | + author_id: @user.id | |
51 | + ) | |
52 | + end | |
53 | + | |
54 | + And 'this project has new member event' do | |
55 | + user = create(:user, {name: "John Doe"}) | |
56 | + Event.create( | |
57 | + project: @project, | |
58 | + author_id: user.id, | |
59 | + action: Event::JOINED | |
60 | + ) | |
61 | + end | |
62 | + | |
63 | + And 'this project has merge request event' do | |
64 | + merge_request = create :merge_request, author: @user, source_project: @project, target_project: @project | |
65 | + Event.create( | |
66 | + project: @project, | |
67 | + action: Event::MERGED, | |
68 | + target_id: merge_request.id, | |
69 | + target_type: "MergeRequest", | |
70 | + author_id: @user.id | |
71 | + ) | |
72 | + end | |
73 | + | |
74 | + When 'I click "push" event filter' do | |
75 | + click_link("push_event_filter") | |
76 | + end | |
77 | + | |
78 | + When 'I click "team" event filter' do | |
79 | + click_link("team_event_filter") | |
80 | + end | |
81 | + | |
82 | + When 'I click "merge" event filter' do | |
83 | + click_link("merged_event_filter") | |
84 | + end | |
85 | + | |
86 | +end | |
87 | + | ... | ... |
... | ... | @@ -0,0 +1,74 @@ |
1 | +class DashboardIssues < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + | |
5 | + step 'I should see issues assigned to me' do | |
6 | + should_see(assigned_issue) | |
7 | + should_not_see(authored_issue) | |
8 | + should_not_see(other_issue) | |
9 | + end | |
10 | + | |
11 | + step 'I should see issues authored by me' do | |
12 | + should_see(authored_issue) | |
13 | + should_not_see(assigned_issue) | |
14 | + should_not_see(other_issue) | |
15 | + end | |
16 | + | |
17 | + step 'I should see all issues' do | |
18 | + should_see(authored_issue) | |
19 | + should_see(assigned_issue) | |
20 | + should_see(other_issue) | |
21 | + end | |
22 | + | |
23 | + step 'I have authored issues' do | |
24 | + authored_issue | |
25 | + end | |
26 | + | |
27 | + step 'I have assigned issues' do | |
28 | + assigned_issue | |
29 | + end | |
30 | + | |
31 | + step 'I have other issues' do | |
32 | + other_issue | |
33 | + end | |
34 | + | |
35 | + step 'I click "Authored by me" link' do | |
36 | + within ".scope-filter" do | |
37 | + click_link 'Created by me' | |
38 | + end | |
39 | + end | |
40 | + | |
41 | + step 'I click "All" link' do | |
42 | + within ".scope-filter" do | |
43 | + click_link "Everyone's" | |
44 | + end | |
45 | + end | |
46 | + | |
47 | + def should_see(issue) | |
48 | + page.should have_content(issue.title[0..10]) | |
49 | + end | |
50 | + | |
51 | + def should_not_see(issue) | |
52 | + page.should_not have_content(issue.title[0..10]) | |
53 | + end | |
54 | + | |
55 | + def assigned_issue | |
56 | + @assigned_issue ||= create :issue, assignee: current_user, project: project | |
57 | + end | |
58 | + | |
59 | + def authored_issue | |
60 | + @authored_issue ||= create :issue, author: current_user, project: project | |
61 | + end | |
62 | + | |
63 | + def other_issue | |
64 | + @other_issue ||= create :issue, project: project | |
65 | + end | |
66 | + | |
67 | + def project | |
68 | + @project ||= begin | |
69 | + project =create :project | |
70 | + project.team << [current_user, :master] | |
71 | + project | |
72 | + end | |
73 | + end | |
74 | +end | ... | ... |
... | ... | @@ -0,0 +1,74 @@ |
1 | +class DashboardMergeRequests < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + | |
5 | + step 'I should see merge requests assigned to me' do | |
6 | + should_see(assigned_merge_request) | |
7 | + should_not_see(authored_merge_request) | |
8 | + should_not_see(other_merge_request) | |
9 | + end | |
10 | + | |
11 | + step 'I should see merge requests authored by me' do | |
12 | + should_see(authored_merge_request) | |
13 | + should_not_see(assigned_merge_request) | |
14 | + should_not_see(other_merge_request) | |
15 | + end | |
16 | + | |
17 | + step 'I should see all merge requests' do | |
18 | + should_see(authored_merge_request) | |
19 | + should_see(assigned_merge_request) | |
20 | + should_see(other_merge_request) | |
21 | + end | |
22 | + | |
23 | + step 'I have authored merge requests' do | |
24 | + authored_merge_request | |
25 | + end | |
26 | + | |
27 | + step 'I have assigned merge requests' do | |
28 | + assigned_merge_request | |
29 | + end | |
30 | + | |
31 | + step 'I have other merge requests' do | |
32 | + other_merge_request | |
33 | + end | |
34 | + | |
35 | + step 'I click "Authored by me" link' do | |
36 | + within ".scope-filter" do | |
37 | + click_link 'Created by me' | |
38 | + end | |
39 | + end | |
40 | + | |
41 | + step 'I click "All" link' do | |
42 | + within ".scope-filter" do | |
43 | + click_link "Everyone's" | |
44 | + end | |
45 | + end | |
46 | + | |
47 | + def should_see(merge_request) | |
48 | + page.should have_content(merge_request.title[0..10]) | |
49 | + end | |
50 | + | |
51 | + def should_not_see(merge_request) | |
52 | + page.should_not have_content(merge_request.title[0..10]) | |
53 | + end | |
54 | + | |
55 | + def assigned_merge_request | |
56 | + @assigned_merge_request ||= create :merge_request, assignee: current_user, target_project: project | |
57 | + end | |
58 | + | |
59 | + def authored_merge_request | |
60 | + @authored_merge_request ||= create :merge_request, author: current_user, target_project: project | |
61 | + end | |
62 | + | |
63 | + def other_merge_request | |
64 | + @other_merge_request ||= create :merge_request, target_project: project | |
65 | + end | |
66 | + | |
67 | + def project | |
68 | + @project ||= begin | |
69 | + project =create :project | |
70 | + project.team << [current_user, :master] | |
71 | + project | |
72 | + end | |
73 | + end | |
74 | +end | ... | ... |
... | ... | @@ -0,0 +1,11 @@ |
1 | +class DashboardProjects < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedProject | |
5 | + | |
6 | + Then 'I should see projects list' do | |
7 | + @user.authorized_projects.all.each do |project| | |
8 | + page.should have_link project.name_with_namespace | |
9 | + end | |
10 | + end | |
11 | +end | ... | ... |
... | ... | @@ -0,0 +1,19 @@ |
1 | +class DashboardSearch < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedProject | |
5 | + | |
6 | + Given 'I search for "Sho"' do | |
7 | + fill_in "dashboard_search", with: "Sho" | |
8 | + click_button "Search" | |
9 | + end | |
10 | + | |
11 | + Then 'I should see "Shop" project link' do | |
12 | + page.should have_link "Shop" | |
13 | + end | |
14 | + | |
15 | + Given 'I search for "Contibuting"' do | |
16 | + fill_in "dashboard_search", with: "Contibuting" | |
17 | + click_button "Search" | |
18 | + end | |
19 | +end | ... | ... |
... | ... | @@ -0,0 +1,22 @@ |
1 | +class DashboardWithArchivedProjects < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedProject | |
5 | + | |
6 | + When 'project "Forum" is archived' do | |
7 | + project = Project.find_by(name: "Forum") | |
8 | + project.update_attribute(:archived, true) | |
9 | + end | |
10 | + | |
11 | + Then 'I should see "Shop" project link' do | |
12 | + page.should have_link "Shop" | |
13 | + end | |
14 | + | |
15 | + Then 'I should not see "Forum" project link' do | |
16 | + page.should_not have_link "Forum" | |
17 | + end | |
18 | + | |
19 | + Then 'I should see "Forum" project link' do | |
20 | + page.should have_link "Forum" | |
21 | + end | |
22 | +end | ... | ... |
... | ... | @@ -0,0 +1,25 @@ |
1 | +class ProfileActiveTab < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedActiveTab | |
5 | + | |
6 | + Then 'the active main tab should be Home' do | |
7 | + ensure_active_main_tab('Home') | |
8 | + end | |
9 | + | |
10 | + Then 'the active main tab should be Account' do | |
11 | + ensure_active_main_tab('Account') | |
12 | + end | |
13 | + | |
14 | + Then 'the active main tab should be SSH Keys' do | |
15 | + ensure_active_main_tab('SSH Keys') | |
16 | + end | |
17 | + | |
18 | + Then 'the active main tab should be Design' do | |
19 | + ensure_active_main_tab('Design') | |
20 | + end | |
21 | + | |
22 | + Then 'the active main tab should be History' do | |
23 | + ensure_active_main_tab('History') | |
24 | + end | |
25 | +end | ... | ... |
... | ... | @@ -0,0 +1,48 @@ |
1 | +class ProfileEmails < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + | |
4 | + Then 'I visit profile emails page' do | |
5 | + visit profile_emails_path | |
6 | + end | |
7 | + | |
8 | + Then 'I should see my emails' do | |
9 | + page.should have_content(@user.email) | |
10 | + @user.emails.each do |email| | |
11 | + page.should have_content(email.email) | |
12 | + end | |
13 | + end | |
14 | + | |
15 | + And 'I submit new email "my@email.com"' do | |
16 | + fill_in "email_email", with: "my@email.com" | |
17 | + click_button "Add" | |
18 | + end | |
19 | + | |
20 | + Then 'I should see new email "my@email.com"' do | |
21 | + email = @user.emails.find_by(email: "my@email.com") | |
22 | + email.should_not be_nil | |
23 | + page.should have_content("my@email.com") | |
24 | + end | |
25 | + | |
26 | + Then 'I should not see email "my@email.com"' do | |
27 | + email = @user.emails.find_by(email: "my@email.com") | |
28 | + email.should be_nil | |
29 | + page.should_not have_content("my@email.com") | |
30 | + end | |
31 | + | |
32 | + Then 'I click link "Remove" for "my@email.com"' do | |
33 | + # there should only be one remove button at this time | |
34 | + click_link "Remove" | |
35 | + # force these to reload as they have been cached | |
36 | + @user.emails.reload | |
37 | + end | |
38 | + | |
39 | + And 'I submit duplicate email @user.email' do | |
40 | + fill_in "email_email", with: @user.email | |
41 | + click_button "Add" | |
42 | + end | |
43 | + | |
44 | + Then 'I should not have @user.email added' do | |
45 | + email = @user.emails.find_by(email: @user.email) | |
46 | + email.should be_nil | |
47 | + end | |
48 | +end | ... | ... |
... | ... | @@ -0,0 +1,12 @@ |
1 | +class ProfileNotifications < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + | |
5 | + step 'I visit profile notifications page' do | |
6 | + visit profile_notifications_path | |
7 | + end | |
8 | + | |
9 | + step 'I should see global notifications settings' do | |
10 | + page.should have_content "Notifications settings" | |
11 | + end | |
12 | +end | ... | ... |
features/steps/profile/profile_active_tab.rb
... | ... | @@ -1,25 +0,0 @@ |
1 | -class ProfileActiveTab < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedActiveTab | |
5 | - | |
6 | - Then 'the active main tab should be Home' do | |
7 | - ensure_active_main_tab('Home') | |
8 | - end | |
9 | - | |
10 | - Then 'the active main tab should be Account' do | |
11 | - ensure_active_main_tab('Account') | |
12 | - end | |
13 | - | |
14 | - Then 'the active main tab should be SSH Keys' do | |
15 | - ensure_active_main_tab('SSH Keys') | |
16 | - end | |
17 | - | |
18 | - Then 'the active main tab should be Design' do | |
19 | - ensure_active_main_tab('Design') | |
20 | - end | |
21 | - | |
22 | - Then 'the active main tab should be History' do | |
23 | - ensure_active_main_tab('History') | |
24 | - end | |
25 | -end |
features/steps/profile/profile_emails.rb
... | ... | @@ -1,48 +0,0 @@ |
1 | -class ProfileEmails < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - | |
4 | - Then 'I visit profile emails page' do | |
5 | - visit profile_emails_path | |
6 | - end | |
7 | - | |
8 | - Then 'I should see my emails' do | |
9 | - page.should have_content(@user.email) | |
10 | - @user.emails.each do |email| | |
11 | - page.should have_content(email.email) | |
12 | - end | |
13 | - end | |
14 | - | |
15 | - And 'I submit new email "my@email.com"' do | |
16 | - fill_in "email_email", with: "my@email.com" | |
17 | - click_button "Add" | |
18 | - end | |
19 | - | |
20 | - Then 'I should see new email "my@email.com"' do | |
21 | - email = @user.emails.find_by(email: "my@email.com") | |
22 | - email.should_not be_nil | |
23 | - page.should have_content("my@email.com") | |
24 | - end | |
25 | - | |
26 | - Then 'I should not see email "my@email.com"' do | |
27 | - email = @user.emails.find_by(email: "my@email.com") | |
28 | - email.should be_nil | |
29 | - page.should_not have_content("my@email.com") | |
30 | - end | |
31 | - | |
32 | - Then 'I click link "Remove" for "my@email.com"' do | |
33 | - # there should only be one remove button at this time | |
34 | - click_link "Remove" | |
35 | - # force these to reload as they have been cached | |
36 | - @user.emails.reload | |
37 | - end | |
38 | - | |
39 | - And 'I submit duplicate email @user.email' do | |
40 | - fill_in "email_email", with: @user.email | |
41 | - click_button "Add" | |
42 | - end | |
43 | - | |
44 | - Then 'I should not have @user.email added' do | |
45 | - email = @user.emails.find_by(email: @user.email) | |
46 | - email.should be_nil | |
47 | - end | |
48 | -end |
features/steps/profile/profile_notifications.rb
... | ... | @@ -1,12 +0,0 @@ |
1 | -class ProfileNotifications < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - | |
5 | - step 'I visit profile notifications page' do | |
6 | - visit profile_notifications_path | |
7 | - end | |
8 | - | |
9 | - step 'I should see global notifications settings' do | |
10 | - page.should have_content "Notifications settings" | |
11 | - end | |
12 | -end |
features/steps/profile/profile_ssh_keys.rb
... | ... | @@ -1,48 +0,0 @@ |
1 | -class ProfileSshKeys < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - | |
4 | - Then 'I should see my ssh keys' do | |
5 | - @user.keys.each do |key| | |
6 | - page.should have_content(key.title) | |
7 | - end | |
8 | - end | |
9 | - | |
10 | - Given 'I click link "Add new"' do | |
11 | - click_link "Add SSH Key" | |
12 | - end | |
13 | - | |
14 | - And 'I submit new ssh key "Laptop"' do | |
15 | - fill_in "key_title", with: "Laptop" | |
16 | - fill_in "key_key", with: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzrEJUIR6Y03TCE9rIJ+GqTBvgb8t1jI9h5UBzCLuK4VawOmkLornPqLDrGbm6tcwM/wBrrLvVOqi2HwmkKEIecVO0a64A4rIYScVsXIniHRS6w5twyn1MD3sIbN+socBDcaldECQa2u1dI3tnNVcs8wi77fiRe7RSxePsJceGoheRQgC8AZ510UdIlO+9rjIHUdVN7LLyz512auAfYsgx1OfablkQ/XJcdEwDNgi9imI6nAXhmoKUm1IPLT2yKajTIC64AjLOnE0YyCh6+7RFMpiMyu1qiOCpdjYwTgBRiciNRZCH8xIedyCoAmiUgkUT40XYHwLuwiPJICpkAzp7Q== user@laptop" | |
17 | - click_button "Add key" | |
18 | - end | |
19 | - | |
20 | - Then 'I should see new ssh key "Laptop"' do | |
21 | - key = Key.find_by(title: "Laptop") | |
22 | - page.should have_content(key.title) | |
23 | - page.should have_content(key.key) | |
24 | - current_path.should == profile_key_path(key) | |
25 | - end | |
26 | - | |
27 | - Given 'I click link "Work"' do | |
28 | - click_link "Work" | |
29 | - end | |
30 | - | |
31 | - And 'I click link "Remove"' do | |
32 | - click_link "Remove" | |
33 | - end | |
34 | - | |
35 | - Then 'I visit profile keys page' do | |
36 | - visit profile_keys_path | |
37 | - end | |
38 | - | |
39 | - And 'I should not see "Work" ssh key' do | |
40 | - within "#keys-table" do | |
41 | - page.should_not have_content "Work" | |
42 | - end | |
43 | - end | |
44 | - | |
45 | - And 'I have ssh key "ssh-rsa Work"' do | |
46 | - create(:key, user: @user, title: "ssh-rsa Work", key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+L3TbFegm3k8QjejSwemk4HhlRh+DuN679Pc5ckqE/MPhVtE/+kZQDYCTB284GiT2aIoGzmZ8ee9TkaoejAsBwlA+Wz2Q3vhz65X6sMgalRwpdJx8kSEUYV8ZPV3MZvPo8KdNg993o4jL6G36GDW4BPIyO6FPZhfsawdf6liVD0Xo5kibIK7B9VoE178cdLQtLpS2YolRwf5yy6XR6hbbBGQR+6xrGOdP16eGZDb1CE2bMvvJijjloFqPscGktWOqW+nfh5txwFfBzlfARDTBsS8WZtg3Yoj1kn33kPsWRlgHfNutFRAIynDuDdQzQq8tTtVwm+Yi75RfcPHW8y3P Work") | |
47 | - end | |
48 | -end |
... | ... | @@ -0,0 +1,48 @@ |
1 | +class ProfileSshKeys < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + | |
4 | + Then 'I should see my ssh keys' do | |
5 | + @user.keys.each do |key| | |
6 | + page.should have_content(key.title) | |
7 | + end | |
8 | + end | |
9 | + | |
10 | + Given 'I click link "Add new"' do | |
11 | + click_link "Add SSH Key" | |
12 | + end | |
13 | + | |
14 | + And 'I submit new ssh key "Laptop"' do | |
15 | + fill_in "key_title", with: "Laptop" | |
16 | + fill_in "key_key", with: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzrEJUIR6Y03TCE9rIJ+GqTBvgb8t1jI9h5UBzCLuK4VawOmkLornPqLDrGbm6tcwM/wBrrLvVOqi2HwmkKEIecVO0a64A4rIYScVsXIniHRS6w5twyn1MD3sIbN+socBDcaldECQa2u1dI3tnNVcs8wi77fiRe7RSxePsJceGoheRQgC8AZ510UdIlO+9rjIHUdVN7LLyz512auAfYsgx1OfablkQ/XJcdEwDNgi9imI6nAXhmoKUm1IPLT2yKajTIC64AjLOnE0YyCh6+7RFMpiMyu1qiOCpdjYwTgBRiciNRZCH8xIedyCoAmiUgkUT40XYHwLuwiPJICpkAzp7Q== user@laptop" | |
17 | + click_button "Add key" | |
18 | + end | |
19 | + | |
20 | + Then 'I should see new ssh key "Laptop"' do | |
21 | + key = Key.find_by(title: "Laptop") | |
22 | + page.should have_content(key.title) | |
23 | + page.should have_content(key.key) | |
24 | + current_path.should == profile_key_path(key) | |
25 | + end | |
26 | + | |
27 | + Given 'I click link "Work"' do | |
28 | + click_link "Work" | |
29 | + end | |
30 | + | |
31 | + And 'I click link "Remove"' do | |
32 | + click_link "Remove" | |
33 | + end | |
34 | + | |
35 | + Then 'I visit profile keys page' do | |
36 | + visit profile_keys_path | |
37 | + end | |
38 | + | |
39 | + And 'I should not see "Work" ssh key' do | |
40 | + within "#keys-table" do | |
41 | + page.should_not have_content "Work" | |
42 | + end | |
43 | + end | |
44 | + | |
45 | + And 'I have ssh key "ssh-rsa Work"' do | |
46 | + create(:key, user: @user, title: "ssh-rsa Work", key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+L3TbFegm3k8QjejSwemk4HhlRh+DuN679Pc5ckqE/MPhVtE/+kZQDYCTB284GiT2aIoGzmZ8ee9TkaoejAsBwlA+Wz2Q3vhz65X6sMgalRwpdJx8kSEUYV8ZPV3MZvPo8KdNg993o4jL6G36GDW4BPIyO6FPZhfsawdf6liVD0Xo5kibIK7B9VoE178cdLQtLpS2YolRwf5yy6XR6hbbBGQR+6xrGOdP16eGZDb1CE2bMvvJijjloFqPscGktWOqW+nfh5txwFfBzlfARDTBsS8WZtg3Yoj1kn33kPsWRlgHfNutFRAIynDuDdQzQq8tTtVwm+Yi75RfcPHW8y3P Work") | |
47 | + end | |
48 | +end | ... | ... |
... | ... | @@ -0,0 +1,140 @@ |
1 | +class ProjectActiveTab < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedProject | |
5 | + include SharedActiveTab | |
6 | + | |
7 | + # Main Tabs | |
8 | + | |
9 | + Then 'the active main tab should be Home' do | |
10 | + ensure_active_main_tab('Home') | |
11 | + end | |
12 | + | |
13 | + Then 'the active main tab should be Settings' do | |
14 | + ensure_active_main_tab('Settings') | |
15 | + end | |
16 | + | |
17 | + Then 'the active main tab should be Files' do | |
18 | + ensure_active_main_tab('Files') | |
19 | + end | |
20 | + | |
21 | + Then 'the active main tab should be Commits' do | |
22 | + ensure_active_main_tab('Commits') | |
23 | + end | |
24 | + | |
25 | + Then 'the active main tab should be Network' do | |
26 | + ensure_active_main_tab('Network') | |
27 | + end | |
28 | + | |
29 | + Then 'the active main tab should be Issues' do | |
30 | + ensure_active_main_tab('Issues') | |
31 | + end | |
32 | + | |
33 | + Then 'the active main tab should be Merge Requests' do | |
34 | + ensure_active_main_tab('Merge Requests') | |
35 | + end | |
36 | + | |
37 | + Then 'the active main tab should be Wall' do | |
38 | + ensure_active_main_tab('Wall') | |
39 | + end | |
40 | + | |
41 | + Then 'the active main tab should be Wiki' do | |
42 | + ensure_active_main_tab('Wiki') | |
43 | + end | |
44 | + | |
45 | + # Sub Tabs: Home | |
46 | + | |
47 | + Given 'I click the "Team" tab' do | |
48 | + click_link('Members') | |
49 | + end | |
50 | + | |
51 | + Given 'I click the "Attachments" tab' do | |
52 | + click_link('Attachments') | |
53 | + end | |
54 | + | |
55 | + Given 'I click the "Snippets" tab' do | |
56 | + click_link('Snippets') | |
57 | + end | |
58 | + | |
59 | + Given 'I click the "Edit" tab' do | |
60 | + within '.project-settings-nav' do | |
61 | + click_link('Project') | |
62 | + end | |
63 | + end | |
64 | + | |
65 | + Given 'I click the "Hooks" tab' do | |
66 | + click_link('Web Hooks') | |
67 | + end | |
68 | + | |
69 | + Given 'I click the "Deploy Keys" tab' do | |
70 | + click_link('Deploy Keys') | |
71 | + end | |
72 | + | |
73 | + Then 'the active sub nav should be Team' do | |
74 | + ensure_active_sub_nav('Members') | |
75 | + end | |
76 | + | |
77 | + Then 'the active sub nav should be Edit' do | |
78 | + ensure_active_sub_nav('Project') | |
79 | + end | |
80 | + | |
81 | + Then 'the active sub nav should be Hooks' do | |
82 | + ensure_active_sub_nav('Web Hooks') | |
83 | + end | |
84 | + | |
85 | + Then 'the active sub nav should be Deploy Keys' do | |
86 | + ensure_active_sub_nav('Deploy Keys') | |
87 | + end | |
88 | + | |
89 | + # Sub Tabs: Commits | |
90 | + | |
91 | + Given 'I click the "Compare" tab' do | |
92 | + click_link('Compare') | |
93 | + end | |
94 | + | |
95 | + Given 'I click the "Branches" tab' do | |
96 | + click_link('Branches') | |
97 | + end | |
98 | + | |
99 | + Given 'I click the "Tags" tab' do | |
100 | + click_link('Tags') | |
101 | + end | |
102 | + | |
103 | + Then 'the active sub tab should be Commits' do | |
104 | + ensure_active_sub_tab('Commits') | |
105 | + end | |
106 | + | |
107 | + Then 'the active sub tab should be Compare' do | |
108 | + ensure_active_sub_tab('Compare') | |
109 | + end | |
110 | + | |
111 | + Then 'the active sub tab should be Branches' do | |
112 | + ensure_active_sub_tab('Branches') | |
113 | + end | |
114 | + | |
115 | + Then 'the active sub tab should be Tags' do | |
116 | + ensure_active_sub_tab('Tags') | |
117 | + end | |
118 | + | |
119 | + # Sub Tabs: Issues | |
120 | + | |
121 | + Given 'I click the "Milestones" tab' do | |
122 | + click_link('Milestones') | |
123 | + end | |
124 | + | |
125 | + Given 'I click the "Labels" tab' do | |
126 | + click_link('Labels') | |
127 | + end | |
128 | + | |
129 | + Then 'the active sub tab should be Browse Issues' do | |
130 | + ensure_active_sub_tab('Browse Issues') | |
131 | + end | |
132 | + | |
133 | + Then 'the active sub tab should be Milestones' do | |
134 | + ensure_active_sub_tab('Milestones') | |
135 | + end | |
136 | + | |
137 | + Then 'the active sub tab should be Labels' do | |
138 | + ensure_active_sub_tab('Labels') | |
139 | + end | |
140 | +end | ... | ... |
... | ... | @@ -0,0 +1,37 @@ |
1 | +class ProjectArchived < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + When 'project "Forum" is archived' do | |
7 | + project = Project.find_by(name: "Forum") | |
8 | + project.update_attribute(:archived, true) | |
9 | + end | |
10 | + | |
11 | + When 'project "Shop" is archived' do | |
12 | + project = Project.find_by(name: "Shop") | |
13 | + project.update_attribute(:archived, true) | |
14 | + end | |
15 | + | |
16 | + When 'I visit project "Forum" page' do | |
17 | + project = Project.find_by(name: "Forum") | |
18 | + visit project_path(project) | |
19 | + end | |
20 | + | |
21 | + Then 'I should not see "Archived"' do | |
22 | + page.should_not have_content "Archived" | |
23 | + end | |
24 | + | |
25 | + Then 'I should see "Archived"' do | |
26 | + page.should have_content "Archived" | |
27 | + end | |
28 | + | |
29 | + When 'I set project archived' do | |
30 | + click_link "Archive" | |
31 | + end | |
32 | + | |
33 | + When 'I set project unarchived' do | |
34 | + click_link "Unarchive" | |
35 | + end | |
36 | + | |
37 | +end | |
0 | 38 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,35 @@ |
1 | +class ProjectBrowseBranches < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + Then 'I should see "Shop" recent branches list' do | |
7 | + page.should have_content "Branches" | |
8 | + page.should have_content "master" | |
9 | + end | |
10 | + | |
11 | + Given 'I click link "All"' do | |
12 | + click_link "All" | |
13 | + end | |
14 | + | |
15 | + Then 'I should see "Shop" all branches list' do | |
16 | + page.should have_content "Branches" | |
17 | + page.should have_content "master" | |
18 | + end | |
19 | + | |
20 | + Given 'I click link "Protected"' do | |
21 | + click_link "Protected" | |
22 | + end | |
23 | + | |
24 | + Then 'I should see "Shop" protected branches list' do | |
25 | + within ".protected-branches-list" do | |
26 | + page.should have_content "stable" | |
27 | + page.should_not have_content "master" | |
28 | + end | |
29 | + end | |
30 | + | |
31 | + And 'project "Shop" has protected branches' do | |
32 | + project = Project.find_by(name: "Shop") | |
33 | + project.protected_branches.create(name: "stable") | |
34 | + end | |
35 | +end | ... | ... |
... | ... | @@ -0,0 +1,104 @@ |
1 | +class ProjectBrowseCommits < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + Then 'I see project commits' do | |
7 | + commit = @project.repository.commit | |
8 | + page.should have_content(@project.name) | |
9 | + page.should have_content(commit.message) | |
10 | + page.should have_content(commit.id.to_s[0..5]) | |
11 | + end | |
12 | + | |
13 | + Given 'I click atom feed link' do | |
14 | + click_link "Feed" | |
15 | + end | |
16 | + | |
17 | + Then 'I see commits atom feed' do | |
18 | + commit = @project.repository.commit | |
19 | + page.response_headers['Content-Type'].should have_content("application/atom+xml") | |
20 | + page.body.should have_selector("title", text: "Recent commits to #{@project.name}") | |
21 | + page.body.should have_selector("author email", text: commit.author_email) | |
22 | + page.body.should have_selector("entry summary", text: commit.description) | |
23 | + end | |
24 | + | |
25 | + Given 'I click on commit link' do | |
26 | + visit project_commit_path(@project, ValidCommit::ID) | |
27 | + end | |
28 | + | |
29 | + Then 'I see commit info' do | |
30 | + page.should have_content ValidCommit::MESSAGE | |
31 | + page.should have_content "Showing 1 changed file" | |
32 | + end | |
33 | + | |
34 | + And 'I fill compare fields with refs' do | |
35 | + fill_in "from", with: "8716fc78f3c65bbf7bcf7b574febd583bc5d2812" | |
36 | + fill_in "to", with: "bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a" | |
37 | + click_button "Compare" | |
38 | + end | |
39 | + | |
40 | + Then 'I see compared refs' do | |
41 | + page.should have_content "Compare View" | |
42 | + page.should have_content "Commits (1)" | |
43 | + page.should have_content "Showing 2 changed files" | |
44 | + end | |
45 | + | |
46 | + Then 'I see breadcrumb links' do | |
47 | + page.should have_selector('ul.breadcrumb') | |
48 | + page.should have_selector('ul.breadcrumb span.divider', count: 3) | |
49 | + page.should have_selector('ul.breadcrumb a', count: 4) | |
50 | + | |
51 | + find('ul.breadcrumb li:nth-child(2) a')['href'].should match(/#{@project.path_with_namespace}\/commits\/master\z/) | |
52 | + find('ul.breadcrumb li:last a')['href'].should match(%r{master/app/models/project\.rb\z}) | |
53 | + end | |
54 | + | |
55 | + Then 'I see commits stats' do | |
56 | + page.should have_content 'Top 50 Committers' | |
57 | + page.should have_content 'Committers' | |
58 | + page.should have_content 'Total commits' | |
59 | + page.should have_content 'Authors' | |
60 | + end | |
61 | + | |
62 | + Given 'I visit big commit page' do | |
63 | + visit project_commit_path(@project, BigCommits::BIG_COMMIT_ID) | |
64 | + end | |
65 | + | |
66 | + Then 'I see big commit warning' do | |
67 | + page.should have_content BigCommits::BIG_COMMIT_MESSAGE | |
68 | + page.should have_content "Warning! This is a large diff" | |
69 | + page.should have_content "If you still want to see the diff" | |
70 | + end | |
71 | + | |
72 | + Given 'I visit huge commit page' do | |
73 | + visit project_commit_path(@project, BigCommits::HUGE_COMMIT_ID) | |
74 | + end | |
75 | + | |
76 | + Then 'I see huge commit message' do | |
77 | + page.should have_content BigCommits::HUGE_COMMIT_MESSAGE | |
78 | + page.should have_content "Warning! This is a large diff" | |
79 | + page.should_not have_content "If you still want to see the diff" | |
80 | + end | |
81 | + | |
82 | + Given 'I visit a commit with an image that changed' do | |
83 | + visit project_commit_path(@project, 'cc1ba255d6c5ffdce87a357ba7ccc397a4f4026b') | |
84 | + end | |
85 | + | |
86 | + Then 'The diff links to both the previous and current image' do | |
87 | + links = page.all('.two-up span div a') | |
88 | + links[0]['href'].should =~ %r{blob/bc3735004cb45cec5e0e4fa92710897a910a5957} | |
89 | + links[1]['href'].should =~ %r{blob/cc1ba255d6c5ffdce87a357ba7ccc397a4f4026b} | |
90 | + end | |
91 | + | |
92 | + Given 'I click side-by-side diff button' do | |
93 | + click_link "Side-by-side Diff" | |
94 | + end | |
95 | + | |
96 | + Then 'I see side-by-side diff button' do | |
97 | + page.should have_content "Side-by-side Diff" | |
98 | + end | |
99 | + | |
100 | + Then 'I see inline diff button' do | |
101 | + page.should have_content "Inline Diff" | |
102 | + end | |
103 | + | |
104 | +end | ... | ... |
... | ... | @@ -0,0 +1,35 @@ |
1 | +class ProjectBrowseCommitsUserLookup < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + Given 'I have the user that authored the commits' do | |
7 | + @user = create(:user, email: 'dmitriy.zaporozhets@gmail.com') | |
8 | + create(:email, { user: @user, email: 'dzaporozhets@sphereconsultinginc.com' }) | |
9 | + end | |
10 | + | |
11 | + Given 'I click on commit link' do | |
12 | + visit project_commit_path(@project, ValidCommit::ID) | |
13 | + end | |
14 | + | |
15 | + Given 'I click on another commit link' do | |
16 | + visit project_commit_path(@project, ValidCommitWithAltEmail::ID) | |
17 | + end | |
18 | + | |
19 | + Then 'I see commit info' do | |
20 | + page.should have_content ValidCommit::MESSAGE | |
21 | + check_author_link(ValidCommit::AUTHOR_EMAIL) | |
22 | + end | |
23 | + | |
24 | + Then 'I see other commit info' do | |
25 | + page.should have_content ValidCommitWithAltEmail::MESSAGE | |
26 | + check_author_link(ValidCommitWithAltEmail::AUTHOR_EMAIL) | |
27 | + end | |
28 | + | |
29 | + def check_author_link(email) | |
30 | + author_link = find('.commit-author-link') | |
31 | + author_link['href'].should == user_path(@user) | |
32 | + author_link['data-original-title'].should == email | |
33 | + find('.commit-author-name').text.should == @user.name | |
34 | + end | |
35 | +end | ... | ... |
... | ... | @@ -0,0 +1,53 @@ |
1 | +class ProjectBrowseFiles < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + step 'I should see files from repository' do | |
7 | + page.should have_content "app" | |
8 | + page.should have_content "history" | |
9 | + page.should have_content "Gemfile" | |
10 | + end | |
11 | + | |
12 | + step 'I should see files from repository for "8470d70"' do | |
13 | + current_path.should == project_tree_path(@project, "8470d70") | |
14 | + page.should have_content "app" | |
15 | + page.should have_content "history" | |
16 | + page.should have_content "Gemfile" | |
17 | + end | |
18 | + | |
19 | + step 'I click on "Gemfile.lock" file in repo' do | |
20 | + click_link "Gemfile.lock" | |
21 | + end | |
22 | + | |
23 | + step 'I should see it content' do | |
24 | + page.should have_content "DEPENDENCIES" | |
25 | + end | |
26 | + | |
27 | + step 'I click link "raw"' do | |
28 | + click_link "raw" | |
29 | + end | |
30 | + | |
31 | + step 'I should see raw file content' do | |
32 | + page.source.should == ValidCommit::BLOB_FILE | |
33 | + end | |
34 | + | |
35 | + step 'I click button "edit"' do | |
36 | + click_link 'edit' | |
37 | + end | |
38 | + | |
39 | + step 'I can edit code' do | |
40 | + page.execute_script('editor.setValue("GitlabFileEditor")') | |
41 | + page.evaluate_script('editor.getValue()').should == "GitlabFileEditor" | |
42 | + end | |
43 | + | |
44 | + step 'I click on "new file" link in repo' do | |
45 | + click_link 'new-file-link' | |
46 | + end | |
47 | + | |
48 | + step 'I can see new file page' do | |
49 | + page.should have_content "New file" | |
50 | + page.should have_content "File name" | |
51 | + page.should have_content "Commit message" | |
52 | + end | |
53 | +end | ... | ... |
... | ... | @@ -0,0 +1,19 @@ |
1 | +class ProjectBrowseGitRepo < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + Given 'I click on "Gemfile.lock" file in repo' do | |
7 | + click_link "Gemfile.lock" | |
8 | + end | |
9 | + | |
10 | + And 'I click blame button' do | |
11 | + click_link "blame" | |
12 | + end | |
13 | + | |
14 | + Then 'I should see git file blame' do | |
15 | + page.should have_content "DEPENDENCIES" | |
16 | + page.should have_content "Dmitriy Zaporozhets" | |
17 | + page.should have_content "Moving to rails 3.2" | |
18 | + end | |
19 | +end | ... | ... |
... | ... | @@ -0,0 +1,10 @@ |
1 | +class ProjectBrowseTags < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + Then 'I should see "Shop" all tags list' do | |
7 | + page.should have_content "Tags" | |
8 | + page.should have_content "v1.2.1" | |
9 | + end | |
10 | +end | ... | ... |
... | ... | @@ -0,0 +1,42 @@ |
1 | +class CreateProject < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + | |
5 | + And 'fill project form with valid data' do | |
6 | + fill_in 'project_name', with: 'Empty' | |
7 | + click_button "Create project" | |
8 | + end | |
9 | + | |
10 | + Then 'I should see project page' do | |
11 | + current_path.should == project_path(Project.last) | |
12 | + page.should have_content "Empty" | |
13 | + end | |
14 | + | |
15 | + And 'I should see empty project instuctions' do | |
16 | + page.should have_content "git init" | |
17 | + page.should have_content "git remote" | |
18 | + page.should have_content Project.last.url_to_repo | |
19 | + end | |
20 | + | |
21 | + Then 'I see empty project instuctions' do | |
22 | + page.should have_content "git init" | |
23 | + page.should have_content "git remote" | |
24 | + page.should have_content Project.last.url_to_repo | |
25 | + end | |
26 | + | |
27 | + And 'I click on HTTP' do | |
28 | + click_button 'HTTP' | |
29 | + end | |
30 | + | |
31 | + Then 'Remote url should update to http link' do | |
32 | + page.should have_content "git remote add origin #{Project.last.http_url_to_repo}" | |
33 | + end | |
34 | + | |
35 | + And 'If I click on SSH' do | |
36 | + click_button 'SSH' | |
37 | + end | |
38 | + | |
39 | + Then 'Remote url should update to ssh link' do | |
40 | + page.should have_content "git remote add origin #{Project.last.url_to_repo}" | |
41 | + end | |
42 | +end | ... | ... |
features/steps/project/create_project.rb
... | ... | @@ -1,42 +0,0 @@ |
1 | -class CreateProject < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - | |
5 | - And 'fill project form with valid data' do | |
6 | - fill_in 'project_name', with: 'Empty' | |
7 | - click_button "Create project" | |
8 | - end | |
9 | - | |
10 | - Then 'I should see project page' do | |
11 | - current_path.should == project_path(Project.last) | |
12 | - page.should have_content "Empty" | |
13 | - end | |
14 | - | |
15 | - And 'I should see empty project instuctions' do | |
16 | - page.should have_content "git init" | |
17 | - page.should have_content "git remote" | |
18 | - page.should have_content Project.last.url_to_repo | |
19 | - end | |
20 | - | |
21 | - Then 'I see empty project instuctions' do | |
22 | - page.should have_content "git init" | |
23 | - page.should have_content "git remote" | |
24 | - page.should have_content Project.last.url_to_repo | |
25 | - end | |
26 | - | |
27 | - And 'I click on HTTP' do | |
28 | - click_button 'HTTP' | |
29 | - end | |
30 | - | |
31 | - Then 'Remote url should update to http link' do | |
32 | - page.should have_content "git remote add origin #{Project.last.http_url_to_repo}" | |
33 | - end | |
34 | - | |
35 | - And 'If I click on SSH' do | |
36 | - click_button 'SSH' | |
37 | - end | |
38 | - | |
39 | - Then 'Remote url should update to ssh link' do | |
40 | - page.should have_content "git remote add origin #{Project.last.url_to_repo}" | |
41 | - end | |
42 | -end |
... | ... | @@ -0,0 +1,70 @@ |
1 | +class ProjectFilterLabels < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + Then 'I should see "bug" in labels filter' do | |
7 | + within ".labels-filter" do | |
8 | + page.should have_content "bug" | |
9 | + end | |
10 | + end | |
11 | + | |
12 | + And 'I should see "feature" in labels filter' do | |
13 | + within ".labels-filter" do | |
14 | + page.should have_content "feature" | |
15 | + end | |
16 | + end | |
17 | + | |
18 | + And 'I should see "enhancement" in labels filter' do | |
19 | + within ".labels-filter" do | |
20 | + page.should have_content "enhancement" | |
21 | + end | |
22 | + end | |
23 | + | |
24 | + Then 'I should see "Bugfix1" in issues list' do | |
25 | + within ".issues-list" do | |
26 | + page.should have_content "Bugfix1" | |
27 | + end | |
28 | + end | |
29 | + | |
30 | + And 'I should see "Bugfix2" in issues list' do | |
31 | + within ".issues-list" do | |
32 | + page.should have_content "Bugfix2" | |
33 | + end | |
34 | + end | |
35 | + | |
36 | + And 'I should not see "Bugfix2" in issues list' do | |
37 | + within ".issues-list" do | |
38 | + page.should_not have_content "Bugfix2" | |
39 | + end | |
40 | + end | |
41 | + | |
42 | + And 'I should not see "Feature1" in issues list' do | |
43 | + within ".issues-list" do | |
44 | + page.should_not have_content "Feature1" | |
45 | + end | |
46 | + end | |
47 | + | |
48 | + Given 'I click link "bug"' do | |
49 | + click_link "bug" | |
50 | + end | |
51 | + | |
52 | + Given 'I click link "feature"' do | |
53 | + click_link "feature" | |
54 | + end | |
55 | + | |
56 | + And 'project "Shop" has issue "Bugfix1" with tags: "bug", "feature"' do | |
57 | + project = Project.find_by(name: "Shop") | |
58 | + create(:issue, title: "Bugfix1", project: project, label_list: ['bug', 'feature']) | |
59 | + end | |
60 | + | |
61 | + And 'project "Shop" has issue "Bugfix2" with tags: "bug", "enhancement"' do | |
62 | + project = Project.find_by(name: "Shop") | |
63 | + create(:issue, title: "Bugfix2", project: project, label_list: ['bug', 'enhancement']) | |
64 | + end | |
65 | + | |
66 | + And 'project "Shop" has issue "Feature1" with tags: "feature"' do | |
67 | + project = Project.find_by(name: "Shop") | |
68 | + create(:issue, title: "Feature1", project: project, label_list: 'feature') | |
69 | + end | |
70 | +end | ... | ... |
... | ... | @@ -0,0 +1,36 @@ |
1 | +class ForkProject < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedProject | |
5 | + | |
6 | + step 'I click link "Fork"' do | |
7 | + page.should have_content "Shop" | |
8 | + page.should have_content "Fork" | |
9 | + Gitlab::Shell.any_instance.stub(:fork_repository).and_return(true) | |
10 | + click_link "Fork" | |
11 | + end | |
12 | + | |
13 | + step 'I am a member of project "Shop"' do | |
14 | + @project = Project.find_by(name: "Shop") | |
15 | + @project ||= create(:project, name: "Shop", group: create(:group)) | |
16 | + @project.team << [@user, :reporter] | |
17 | + end | |
18 | + | |
19 | + step 'I should see the forked project page' do | |
20 | + page.should have_content "Project was successfully forked." | |
21 | + current_path.should include current_user.namespace.path | |
22 | + @forked_project = Project.find_by(namespace_id: current_user.namespace.path) | |
23 | + end | |
24 | + | |
25 | + step 'I already have a project named "Shop" in my namespace' do | |
26 | + current_user.namespace ||= create(:namespace) | |
27 | + current_user.namespace.should_not be_nil | |
28 | + current_user.namespace.path.should_not be_nil | |
29 | + @my_project = create(:project, name: "Shop", namespace: current_user.namespace) | |
30 | + end | |
31 | + | |
32 | + step 'I should see a "Name has already been taken" warning' do | |
33 | + page.should have_content "Name has already been taken" | |
34 | + end | |
35 | + | |
36 | +end | ... | ... |
... | ... | @@ -0,0 +1,183 @@ |
1 | +class ProjectForkedMergeRequests < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedNote | |
5 | + include SharedPaths | |
6 | + include Select2Helper | |
7 | + | |
8 | + step 'I am a member of project "Shop"' do | |
9 | + @project = Project.find_by(name: "Shop") | |
10 | + @project ||= create(:project, name: "Shop") | |
11 | + @project.team << [@user, :reporter] | |
12 | + end | |
13 | + | |
14 | + step 'I have a project forked off of "Shop" called "Forked Shop"' do | |
15 | + @forking_user = @user | |
16 | + forked_project_link = build(:forked_project_link) | |
17 | + @forked_project = Project.find_by(name: "Forked Shop") | |
18 | + @forked_project ||= create(:project, name: "Forked Shop", forked_project_link: forked_project_link, creator_id: @forking_user.id , namespace: @forking_user.namespace) | |
19 | + | |
20 | + forked_project_link.forked_from_project = @project | |
21 | + forked_project_link.forked_to_project = @forked_project | |
22 | + @forked_project.team << [@forking_user , :master] | |
23 | + forked_project_link.save! | |
24 | + end | |
25 | + | |
26 | + step 'I click link "New Merge Request"' do | |
27 | + click_link "New Merge Request" | |
28 | + end | |
29 | + | |
30 | + step 'I should see merge request "Merge Request On Forked Project"' do | |
31 | + @project.merge_requests.size.should >= 1 | |
32 | + @merge_request = @project.merge_requests.last | |
33 | + current_path.should == project_merge_request_path(@project, @merge_request) | |
34 | + @merge_request.title.should == "Merge Request On Forked Project" | |
35 | + @merge_request.source_project.should == @forked_project | |
36 | + @merge_request.source_branch.should == "master" | |
37 | + @merge_request.target_branch.should == "stable" | |
38 | + page.should have_content @forked_project.path_with_namespace | |
39 | + page.should have_content @project.path_with_namespace | |
40 | + page.should have_content @merge_request.source_branch | |
41 | + page.should have_content @merge_request.target_branch | |
42 | + end | |
43 | + | |
44 | + step 'I fill out a "Merge Request On Forked Project" merge request' do | |
45 | + select2 @forked_project.id, from: "#merge_request_source_project_id" | |
46 | + select2 @project.id, from: "#merge_request_target_project_id" | |
47 | + | |
48 | + find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s | |
49 | + find(:select, "merge_request_target_project_id", {}).value.should == @project.id.to_s | |
50 | + | |
51 | + select2 "master", from: "#merge_request_source_branch" | |
52 | + select2 "stable", from: "#merge_request_target_branch" | |
53 | + | |
54 | + find(:select, "merge_request_source_branch", {}).value.should == 'master' | |
55 | + find(:select, "merge_request_target_branch", {}).value.should == 'stable' | |
56 | + | |
57 | + fill_in "merge_request_title", with: "Merge Request On Forked Project" | |
58 | + end | |
59 | + | |
60 | + step 'I submit the merge request' do | |
61 | + click_button "Submit merge request" | |
62 | + end | |
63 | + | |
64 | + step 'I follow the target commit link' do | |
65 | + commit = @project.repository.commit | |
66 | + click_link commit.short_id(8) | |
67 | + end | |
68 | + | |
69 | + step 'I should see the commit under the forked from project' do | |
70 | + commit = @project.repository.commit | |
71 | + page.should have_content(commit.message) | |
72 | + end | |
73 | + | |
74 | + step 'I click "Create Merge Request on fork" link' do | |
75 | + click_link "Create Merge Request on fork" | |
76 | + end | |
77 | + | |
78 | + step 'I see prefilled new Merge Request page for the forked project' do | |
79 | + current_path.should == new_project_merge_request_path(@forked_project) | |
80 | + find("#merge_request_source_project_id").value.should == @forked_project.id.to_s | |
81 | + find("#merge_request_target_project_id").value.should == @project.id.to_s | |
82 | + find("#merge_request_source_branch").value.should have_content "new_design" | |
83 | + find("#merge_request_target_branch").value.should have_content "master" | |
84 | + find("#merge_request_title").value.should == "New Design" | |
85 | + verify_commit_link(".mr_target_commit",@project) | |
86 | + verify_commit_link(".mr_source_commit",@forked_project) | |
87 | + end | |
88 | + | |
89 | + step 'I update the merge request title' do | |
90 | + fill_in "merge_request_title", with: "An Edited Forked Merge Request" | |
91 | + end | |
92 | + | |
93 | + step 'I save the merge request' do | |
94 | + click_button "Save changes" | |
95 | + end | |
96 | + | |
97 | + step 'I should see the edited merge request' do | |
98 | + page.should have_content "An Edited Forked Merge Request" | |
99 | + @project.merge_requests.size.should >= 1 | |
100 | + @merge_request = @project.merge_requests.last | |
101 | + current_path.should == project_merge_request_path(@project, @merge_request) | |
102 | + @merge_request.source_project.should == @forked_project | |
103 | + @merge_request.source_branch.should == "master" | |
104 | + @merge_request.target_branch.should == "stable" | |
105 | + page.should have_content @forked_project.path_with_namespace | |
106 | + page.should have_content @project.path_with_namespace | |
107 | + page.should have_content @merge_request.source_branch | |
108 | + page.should have_content @merge_request.target_branch | |
109 | + end | |
110 | + | |
111 | + step 'I should see last push widget' do | |
112 | + page.should have_content "You pushed to new_design" | |
113 | + page.should have_link "Create Merge Request" | |
114 | + end | |
115 | + | |
116 | + step 'project "Forked Shop" has push event' do | |
117 | + @forked_project = Project.find_by(name: "Forked Shop") | |
118 | + | |
119 | + data = { | |
120 | + before: "0000000000000000000000000000000000000000", | |
121 | + after: "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", | |
122 | + ref: "refs/heads/new_design", | |
123 | + user_id: @user.id, | |
124 | + user_name: @user.name, | |
125 | + repository: { | |
126 | + name: @forked_project.name, | |
127 | + url: "localhost/rubinius", | |
128 | + description: "", | |
129 | + homepage: "localhost/rubinius", | |
130 | + private: true | |
131 | + } | |
132 | + } | |
133 | + | |
134 | + @event = Event.create( | |
135 | + project: @forked_project, | |
136 | + action: Event::PUSHED, | |
137 | + data: data, | |
138 | + author_id: @user.id | |
139 | + ) | |
140 | + end | |
141 | + | |
142 | + | |
143 | + step 'I click link edit "Merge Request On Forked Project"' do | |
144 | + find("#edit_merge_request").click | |
145 | + end | |
146 | + | |
147 | + step 'I see the edit page prefilled for "Merge Request On Forked Project"' do | |
148 | + current_path.should == edit_project_merge_request_path(@project, @merge_request) | |
149 | + page.should have_content "Edit merge request ##{@merge_request.id}" | |
150 | + find("#merge_request_title").value.should == "Merge Request On Forked Project" | |
151 | + find("#merge_request_source_project_id").value.should == @forked_project.id.to_s | |
152 | + find("#merge_request_target_project_id").value.should == @project.id.to_s | |
153 | + find("#merge_request_source_branch").value.should have_content "master" | |
154 | + verify_commit_link(".mr_source_commit",@forked_project) | |
155 | + find("#merge_request_target_branch").value.should have_content "stable" | |
156 | + verify_commit_link(".mr_target_commit",@project) | |
157 | + end | |
158 | + | |
159 | + step 'I fill out an invalid "Merge Request On Forked Project" merge request' do | |
160 | + #If this isn't filled in the rest of the validations won't be triggered | |
161 | + fill_in "merge_request_title", with: "Merge Request On Forked Project" | |
162 | + find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s | |
163 | + find(:select, "merge_request_target_project_id", {}).value.should == @forked_project.id.to_s | |
164 | + find(:select, "merge_request_source_branch", {}).value.should == "" | |
165 | + find(:select, "merge_request_target_branch", {}).value.should == "" | |
166 | + end | |
167 | + | |
168 | + step 'I should see validation errors' do | |
169 | + page.should have_content "Source branch can't be blank" | |
170 | + page.should have_content "Target branch can't be blank" | |
171 | + page.should have_content "Branch conflict You can not use same project/branch for source and target" | |
172 | + end | |
173 | + | |
174 | + def project | |
175 | + @project ||= Project.find_by!(name: "Shop") | |
176 | + end | |
177 | + | |
178 | + # Verify a link is generated against the correct project | |
179 | + def verify_commit_link(container_div, container_project) | |
180 | + # This should force a wait for the javascript to execute | |
181 | + find(:div,container_div).find(".commit_short_id")['href'].should have_content "#{container_project.path_with_namespace}/commit" | |
182 | + end | |
183 | +end | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +class ProjectGraph < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + | |
5 | + Then 'page should have graphs' do | |
6 | + page.should have_selector ".stat-graph" | |
7 | + end | |
8 | + | |
9 | + When 'I visit project "Shop" graph page' do | |
10 | + project = Project.find_by(name: "Shop") | |
11 | + visit project_graph_path(project, "master") | |
12 | + end | |
13 | +end | ... | ... |
... | ... | @@ -0,0 +1,38 @@ |
1 | +require 'webmock' | |
2 | + | |
3 | +class ProjectHooks < Spinach::FeatureSteps | |
4 | + include SharedAuthentication | |
5 | + include SharedProject | |
6 | + include SharedPaths | |
7 | + include RSpec::Matchers | |
8 | + include RSpec::Mocks::ExampleMethods | |
9 | + include WebMock::API | |
10 | + | |
11 | + Given 'project has hook' do | |
12 | + @hook = create(:project_hook, project: current_project) | |
13 | + end | |
14 | + | |
15 | + Then 'I should see project hook' do | |
16 | + page.should have_content @hook.url | |
17 | + end | |
18 | + | |
19 | + When 'I submit new hook' do | |
20 | + @url = Faker::Internet.uri("http") | |
21 | + fill_in "hook_url", with: @url | |
22 | + expect { click_button "Add Web Hook" }.to change(ProjectHook, :count).by(1) | |
23 | + end | |
24 | + | |
25 | + Then 'I should see newly created hook' do | |
26 | + page.current_path.should == project_hooks_path(current_project) | |
27 | + page.should have_content(@url) | |
28 | + end | |
29 | + | |
30 | + When 'I click test hook button' do | |
31 | + stub_request(:post, @hook.url).to_return(status: 200) | |
32 | + click_link 'Test Hook' | |
33 | + end | |
34 | + | |
35 | + Then 'hook should be triggered' do | |
36 | + page.current_path.should == project_hooks_path(current_project) | |
37 | + end | |
38 | +end | ... | ... |
... | ... | @@ -0,0 +1,31 @@ |
1 | +class ProjectIssueTracker < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + step 'project "Shop" has issues enabled' do | |
7 | + @project = Project.find_by(name: "Shop") | |
8 | + @project ||= create(:project, name: "Shop", namespace: @user.namespace) | |
9 | + @project.issues_enabled = true | |
10 | + end | |
11 | + | |
12 | + step 'change the issue tracker to "GitLab"' do | |
13 | + select 'GitLab', from: 'project_issues_tracker' | |
14 | + end | |
15 | + | |
16 | + step 'I the project should have "GitLab" as issue tracker' do | |
17 | + find_field('project_issues_tracker').value.should == 'gitlab' | |
18 | + end | |
19 | + | |
20 | + step 'change the issue tracker to "Redmine"' do | |
21 | + select 'Redmine', from: 'project_issues_tracker' | |
22 | + end | |
23 | + | |
24 | + step 'I the project should have "Redmine" as issue tracker' do | |
25 | + find_field('project_issues_tracker').value.should == 'redmine' | |
26 | + end | |
27 | + | |
28 | + And 'I save project' do | |
29 | + click_button 'Save changes' | |
30 | + end | |
31 | +end | ... | ... |
... | ... | @@ -0,0 +1,145 @@ |
1 | +class ProjectIssues < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedNote | |
5 | + include SharedPaths | |
6 | + include SharedMarkdown | |
7 | + | |
8 | + Given 'I should see "Release 0.4" in issues' do | |
9 | + page.should have_content "Release 0.4" | |
10 | + end | |
11 | + | |
12 | + And 'I should not see "Release 0.3" in issues' do | |
13 | + page.should_not have_content "Release 0.3" | |
14 | + end | |
15 | + | |
16 | + And 'I should not see "Tweet control" in issues' do | |
17 | + page.should_not have_content "Tweet control" | |
18 | + end | |
19 | + | |
20 | + Given 'I click link "Closed"' do | |
21 | + click_link "Closed" | |
22 | + end | |
23 | + | |
24 | + Then 'I should see "Release 0.3" in issues' do | |
25 | + page.should have_content "Release 0.3" | |
26 | + end | |
27 | + | |
28 | + And 'I should not see "Release 0.4" in issues' do | |
29 | + page.should_not have_content "Release 0.4" | |
30 | + end | |
31 | + | |
32 | + Given 'I click link "All"' do | |
33 | + click_link "All" | |
34 | + end | |
35 | + | |
36 | + Given 'I click link "Release 0.4"' do | |
37 | + click_link "Release 0.4" | |
38 | + end | |
39 | + | |
40 | + Then 'I should see issue "Release 0.4"' do | |
41 | + page.should have_content "Release 0.4" | |
42 | + end | |
43 | + | |
44 | + Given 'I click link "New Issue"' do | |
45 | + click_link "New Issue" | |
46 | + end | |
47 | + | |
48 | + And 'I submit new issue "500 error on profile"' do | |
49 | + fill_in "issue_title", with: "500 error on profile" | |
50 | + click_button "Submit new issue" | |
51 | + end | |
52 | + | |
53 | + Given 'I click link "500 error on profile"' do | |
54 | + click_link "500 error on profile" | |
55 | + end | |
56 | + | |
57 | + Then 'I should see issue "500 error on profile"' do | |
58 | + issue = Issue.find_by(title: "500 error on profile") | |
59 | + page.should have_content issue.title | |
60 | + page.should have_content issue.author_name | |
61 | + page.should have_content issue.project.name | |
62 | + end | |
63 | + | |
64 | + Given 'I fill in issue search with "Re"' do | |
65 | + fill_in 'issue_search', with: "Re" | |
66 | + end | |
67 | + | |
68 | + Given 'I fill in issue search with "Bu"' do | |
69 | + fill_in 'issue_search', with: "Bu" | |
70 | + end | |
71 | + | |
72 | + And 'I fill in issue search with ".3"' do | |
73 | + fill_in 'issue_search', with: ".3" | |
74 | + end | |
75 | + | |
76 | + And 'I fill in issue search with "Something"' do | |
77 | + fill_in 'issue_search', with: "Something" | |
78 | + end | |
79 | + | |
80 | + And 'I fill in issue search with ""' do | |
81 | + fill_in 'issue_search', with: "" | |
82 | + end | |
83 | + | |
84 | + Given 'project "Shop" has milestone "v2.2"' do | |
85 | + project = Project.find_by(name: "Shop") | |
86 | + milestone = create(:milestone, title: "v2.2", project: project) | |
87 | + | |
88 | + 3.times { create(:issue, project: project, milestone: milestone) } | |
89 | + end | |
90 | + | |
91 | + And 'project "Shop" has milestone "v3.0"' do | |
92 | + project = Project.find_by(name: "Shop") | |
93 | + milestone = create(:milestone, title: "v3.0", project: project) | |
94 | + | |
95 | + 3.times { create(:issue, project: project, milestone: milestone) } | |
96 | + end | |
97 | + | |
98 | + When 'I select milestone "v3.0"' do | |
99 | + select "v3.0", from: "milestone_id" | |
100 | + end | |
101 | + | |
102 | + Then 'I should see selected milestone with title "v3.0"' do | |
103 | + issues_milestone_selector = "#issue_milestone_id_chzn > a" | |
104 | + page.find(issues_milestone_selector).should have_content("v3.0") | |
105 | + end | |
106 | + | |
107 | + When 'I select first assignee from "Shop" project' do | |
108 | + project = Project.find_by(name: "Shop") | |
109 | + first_assignee = project.users.first | |
110 | + select first_assignee.name, from: "assignee_id" | |
111 | + end | |
112 | + | |
113 | + Then 'I should see first assignee from "Shop" as selected assignee' do | |
114 | + issues_assignee_selector = "#issue_assignee_id_chzn > a" | |
115 | + project = Project.find_by(name: "Shop") | |
116 | + assignee_name = project.users.first.name | |
117 | + page.find(issues_assignee_selector).should have_content(assignee_name) | |
118 | + end | |
119 | + | |
120 | + And 'project "Shop" have "Release 0.4" open issue' do | |
121 | + project = Project.find_by(name: "Shop") | |
122 | + create(:issue, | |
123 | + title: "Release 0.4", | |
124 | + project: project, | |
125 | + author: project.users.first, | |
126 | + description: "# Description header" | |
127 | + ) | |
128 | + end | |
129 | + | |
130 | + And 'project "Shop" have "Tweet control" open issue' do | |
131 | + project = Project.find_by(name: "Shop") | |
132 | + create(:issue, | |
133 | + title: "Tweet control", | |
134 | + project: project, | |
135 | + author: project.users.first) | |
136 | + end | |
137 | + | |
138 | + And 'project "Shop" have "Release 0.3" closed issue' do | |
139 | + project = Project.find_by(name: "Shop") | |
140 | + create(:closed_issue, | |
141 | + title: "Release 0.3", | |
142 | + project: project, | |
143 | + author: project.users.first) | |
144 | + end | |
145 | +end | ... | ... |
... | ... | @@ -0,0 +1,24 @@ |
1 | +class ProjectLabels < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + Then 'I should see label "bug"' do | |
7 | + within ".labels-table" do | |
8 | + page.should have_content "bug" | |
9 | + end | |
10 | + end | |
11 | + | |
12 | + And 'I should see label "feature"' do | |
13 | + within ".labels-table" do | |
14 | + page.should have_content "feature" | |
15 | + end | |
16 | + end | |
17 | + | |
18 | + And 'project "Shop" have issues tags: "bug", "feature"' do | |
19 | + project = Project.find_by(name: "Shop") | |
20 | + ['bug', 'feature'].each do |label| | |
21 | + create(:issue, project: project, label_list: label) | |
22 | + end | |
23 | + end | |
24 | +end | ... | ... |
... | ... | @@ -0,0 +1,207 @@ |
1 | +class Spinach::Features::ProjectMarkdownRender < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedMarkdown | |
5 | + | |
6 | + And 'I own project "Delta"' do | |
7 | + @project = Project.find_by(name: "Delta") | |
8 | + @project ||= create(:project, name: "Delta", namespace: @user.namespace) | |
9 | + @project.team << [@user, :master] | |
10 | + end | |
11 | + | |
12 | + Then 'I should see files from repository in master' do | |
13 | + current_path.should == project_tree_path(@project, "master") | |
14 | + page.should have_content "Gemfile" | |
15 | + page.should have_content "app" | |
16 | + page.should have_content "README" | |
17 | + end | |
18 | + | |
19 | + And 'I should see rendered README which contains correct links' do | |
20 | + page.should have_content "Welcome to GitLab GitLab is a free project and repository management application" | |
21 | + page.should have_link "GitLab API doc" | |
22 | + page.should have_link "GitLab API website" | |
23 | + page.should have_link "Rake tasks" | |
24 | + page.should have_link "backup and restore procedure" | |
25 | + page.should have_link "GitLab API doc directory" | |
26 | + page.should have_link "Maintenance" | |
27 | + end | |
28 | + | |
29 | + And 'I click on Gitlab API in README' do | |
30 | + click_link "GitLab API doc" | |
31 | + end | |
32 | + | |
33 | + Then 'I should see correct document rendered' do | |
34 | + current_path.should == project_blob_path(@project, "master/doc/api/README.md") | |
35 | + page.should have_content "All API requests require authentication" | |
36 | + end | |
37 | + | |
38 | + And 'I click on Rake tasks in README' do | |
39 | + click_link "Rake tasks" | |
40 | + end | |
41 | + | |
42 | + Then 'I should see correct directory rendered' do | |
43 | + current_path.should == project_tree_path(@project, "master/doc/raketasks") | |
44 | + page.should have_content "backup_restore.md" | |
45 | + page.should have_content "maintenance.md" | |
46 | + end | |
47 | + | |
48 | + And 'I click on GitLab API doc directory in README' do | |
49 | + click_link "GitLab API doc directory" | |
50 | + end | |
51 | + | |
52 | + Then 'I should see correct doc/api directory rendered' do | |
53 | + current_path.should == project_tree_path(@project, "master/doc/api/") | |
54 | + page.should have_content "README.md" | |
55 | + page.should have_content "users.md" | |
56 | + end | |
57 | + | |
58 | + And 'I click on Maintenance in README' do | |
59 | + click_link "Maintenance" | |
60 | + end | |
61 | + | |
62 | + Then 'I should see correct maintenance file rendered' do | |
63 | + current_path.should == project_blob_path(@project, "master/doc/raketasks/maintenance.md") | |
64 | + page.should have_content "bundle exec rake gitlab:env:info RAILS_ENV=production" | |
65 | + end | |
66 | + | |
67 | + And 'I navigate to the doc/api/README' do | |
68 | + click_link "doc" | |
69 | + click_link "api" | |
70 | + click_link "README.md" | |
71 | + end | |
72 | + | |
73 | + And 'I see correct file rendered' do | |
74 | + current_path.should == project_blob_path(@project, "master/doc/api/README.md") | |
75 | + page.should have_content "Contents" | |
76 | + page.should have_link "Users" | |
77 | + page.should have_link "Rake tasks" | |
78 | + end | |
79 | + | |
80 | + And 'I click on users in doc/api/README' do | |
81 | + click_link "Users" | |
82 | + end | |
83 | + | |
84 | + Then 'I should see the correct document file' do | |
85 | + current_path.should == project_blob_path(@project, "master/doc/api/users.md") | |
86 | + page.should have_content "Get a list of users." | |
87 | + end | |
88 | + | |
89 | + And 'I click on raketasks in doc/api/README' do | |
90 | + click_link "Rake tasks" | |
91 | + end | |
92 | + | |
93 | + When 'I visit markdown branch' do | |
94 | + visit project_tree_path(@project, "markdown") | |
95 | + end | |
96 | + | |
97 | + Then 'I should see files from repository in markdown branch' do | |
98 | + current_path.should == project_tree_path(@project, "markdown") | |
99 | + page.should have_content "Gemfile" | |
100 | + page.should have_content "app" | |
101 | + page.should have_content "README" | |
102 | + end | |
103 | + | |
104 | + And 'I see correct file rendered in markdown branch' do | |
105 | + current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") | |
106 | + page.should have_content "Contents" | |
107 | + page.should have_link "Users" | |
108 | + page.should have_link "Rake tasks" | |
109 | + end | |
110 | + | |
111 | + Then 'I should see correct document rendered for markdown branch' do | |
112 | + current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") | |
113 | + page.should have_content "All API requests require authentication" | |
114 | + end | |
115 | + | |
116 | + Then 'I should see correct directory rendered for markdown branch' do | |
117 | + current_path.should == project_tree_path(@project, "markdown/doc/raketasks") | |
118 | + page.should have_content "backup_restore.md" | |
119 | + page.should have_content "maintenance.md" | |
120 | + end | |
121 | + | |
122 | + Then 'I should see the users document file in markdown branch' do | |
123 | + current_path.should == project_blob_path(@project, "markdown/doc/api/users.md") | |
124 | + page.should have_content "Get a list of users." | |
125 | + end | |
126 | + | |
127 | + Given 'I go to wiki page' do | |
128 | + click_link "Wiki" | |
129 | + current_path.should == project_wiki_path(@project, "home") | |
130 | + end | |
131 | + | |
132 | + And 'I add various links to the wiki page' do | |
133 | + fill_in "wiki[content]", with: "[test](test)\n[GitLab API doc](doc/api/README.md)\n[Rake tasks](doc/raketasks)\n" | |
134 | + fill_in "wiki[message]", with: "Adding links to wiki" | |
135 | + click_button "Create page" | |
136 | + end | |
137 | + | |
138 | + Then 'Wiki page should have added links' do | |
139 | + current_path.should == project_wiki_path(@project, "home") | |
140 | + page.should have_content "test GitLab API doc Rake tasks" | |
141 | + end | |
142 | + | |
143 | + step 'I add a header to the wiki page' do | |
144 | + fill_in "wiki[content]", with: "# Wiki header\n" | |
145 | + fill_in "wiki[message]", with: "Add header to wiki" | |
146 | + click_button "Create page" | |
147 | + end | |
148 | + | |
149 | + step 'Wiki header should have correct id and link' do | |
150 | + header_should_have_correct_id_and_link(1, 'Wiki header', 'wiki-header') | |
151 | + end | |
152 | + | |
153 | + And 'I click on test link' do | |
154 | + click_link "test" | |
155 | + end | |
156 | + | |
157 | + Then 'I see new wiki page named test' do | |
158 | + current_path.should == project_wiki_path(@project, "test") | |
159 | + page.should have_content "Editing" | |
160 | + end | |
161 | + | |
162 | + When 'I go back to wiki page home' do | |
163 | + visit project_wiki_path(@project, "home") | |
164 | + current_path.should == project_wiki_path(@project, "home") | |
165 | + end | |
166 | + | |
167 | + And 'I click on GitLab API doc link' do | |
168 | + click_link "GitLab API" | |
169 | + end | |
170 | + | |
171 | + Then 'I see Gitlab API document' do | |
172 | + current_path.should == project_blob_path(@project, "master/doc/api/README.md") | |
173 | + page.should have_content "Status codes" | |
174 | + end | |
175 | + | |
176 | + And 'I click on Rake tasks link' do | |
177 | + click_link "Rake tasks" | |
178 | + end | |
179 | + | |
180 | + Then 'I see Rake tasks directory' do | |
181 | + current_path.should == project_tree_path(@project, "master/doc/raketasks") | |
182 | + page.should have_content "backup_restore.md" | |
183 | + page.should have_content "maintenance.md" | |
184 | + end | |
185 | + | |
186 | + Given 'I go directory which contains README file' do | |
187 | + visit project_tree_path(@project, "master/doc/api") | |
188 | + current_path.should == project_tree_path(@project, "master/doc/api") | |
189 | + end | |
190 | + | |
191 | + And 'I click on a relative link in README' do | |
192 | + click_link "Users" | |
193 | + end | |
194 | + | |
195 | + Then 'I should see the correct markdown' do | |
196 | + current_path.should == project_blob_path(@project, "master/doc/api/users.md") | |
197 | + page.should have_content "List users" | |
198 | + end | |
199 | + | |
200 | + step 'Header "Application details" should have correct id and link' do | |
201 | + header_should_have_correct_id_and_link(2, 'Application details', 'application-details') | |
202 | + end | |
203 | + | |
204 | + step 'Header "GitLab API" should have correct id and link' do | |
205 | + header_should_have_correct_id_and_link(1, 'GitLab API', 'gitlab-api') | |
206 | + end | |
207 | +end | ... | ... |
... | ... | @@ -0,0 +1,195 @@ |
1 | +class ProjectMergeRequests < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedNote | |
5 | + include SharedPaths | |
6 | + include SharedMarkdown | |
7 | + | |
8 | + step 'I click link "New Merge Request"' do | |
9 | + click_link "New Merge Request" | |
10 | + end | |
11 | + | |
12 | + step 'I click link "Bug NS-04"' do | |
13 | + click_link "Bug NS-04" | |
14 | + end | |
15 | + | |
16 | + step 'I click link "All"' do | |
17 | + click_link "All" | |
18 | + end | |
19 | + | |
20 | + step 'I click link "Closed"' do | |
21 | + click_link "Closed" | |
22 | + end | |
23 | + | |
24 | + step 'I should see merge request "Wiki Feature"' do | |
25 | + within '.merge-request' do | |
26 | + page.should have_content "Wiki Feature" | |
27 | + end | |
28 | + end | |
29 | + | |
30 | + step 'I should see closed merge request "Bug NS-04"' do | |
31 | + merge_request = MergeRequest.find_by!(title: "Bug NS-04") | |
32 | + merge_request.closed?.should be_true | |
33 | + page.should have_content "Closed by" | |
34 | + end | |
35 | + | |
36 | + step 'I should see merge request "Bug NS-04"' do | |
37 | + page.should have_content "Bug NS-04" | |
38 | + end | |
39 | + | |
40 | + step 'I should see "Bug NS-04" in merge requests' do | |
41 | + page.should have_content "Bug NS-04" | |
42 | + end | |
43 | + | |
44 | + step 'I should see "Feature NS-03" in merge requests' do | |
45 | + page.should have_content "Feature NS-03" | |
46 | + end | |
47 | + | |
48 | + step 'I should not see "Feature NS-03" in merge requests' do | |
49 | + page.should_not have_content "Feature NS-03" | |
50 | + end | |
51 | + | |
52 | + | |
53 | + step 'I should not see "Bug NS-04" in merge requests' do | |
54 | + page.should_not have_content "Bug NS-04" | |
55 | + end | |
56 | + | |
57 | + step 'I click link "Close"' do | |
58 | + within '.page-title' do | |
59 | + click_link "Close" | |
60 | + end | |
61 | + end | |
62 | + | |
63 | + step 'I submit new merge request "Wiki Feature"' do | |
64 | + fill_in "merge_request_title", with: "Wiki Feature" | |
65 | + select "master", from: "merge_request_source_branch" | |
66 | + select "notes_refactoring", from: "merge_request_target_branch" | |
67 | + click_button "Submit merge request" | |
68 | + end | |
69 | + | |
70 | + step 'project "Shop" have "Bug NS-04" open merge request' do | |
71 | + create(:merge_request, | |
72 | + title: "Bug NS-04", | |
73 | + source_project: project, | |
74 | + target_project: project, | |
75 | + source_branch: 'stable', | |
76 | + target_branch: 'master', | |
77 | + author: project.users.first, | |
78 | + description: "# Description header" | |
79 | + ) | |
80 | + end | |
81 | + | |
82 | + step 'project "Shop" have "Bug NS-05" open merge request with diffs inside' do | |
83 | + create(:merge_request_with_diffs, | |
84 | + title: "Bug NS-05", | |
85 | + source_project: project, | |
86 | + target_project: project, | |
87 | + author: project.users.first) | |
88 | + end | |
89 | + | |
90 | + step 'project "Shop" have "Feature NS-03" closed merge request' do | |
91 | + create(:closed_merge_request, | |
92 | + title: "Feature NS-03", | |
93 | + source_project: project, | |
94 | + target_project: project, | |
95 | + author: project.users.first) | |
96 | + end | |
97 | + | |
98 | + step 'I switch to the diff tab' do | |
99 | + visit diffs_project_merge_request_path(project, merge_request) | |
100 | + end | |
101 | + | |
102 | + step 'I switch to the merge request\'s comments tab' do | |
103 | + visit project_merge_request_path(project, merge_request) | |
104 | + end | |
105 | + | |
106 | + step 'I click on the first commit in the merge request' do | |
107 | + within '.first-commits' do | |
108 | + click_link merge_request.commits.first.short_id(8) | |
109 | + end | |
110 | + end | |
111 | + | |
112 | + step 'I leave a comment on the diff page' do | |
113 | + init_diff_note | |
114 | + leave_comment "One comment to rule them all" | |
115 | + end | |
116 | + | |
117 | + step 'I leave a comment on the diff page in commit' do | |
118 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | |
119 | + leave_comment "One comment to rule them all" | |
120 | + end | |
121 | + | |
122 | + step 'I leave a comment like "Line is wrong" on line 185 of the first file' do | |
123 | + init_diff_note | |
124 | + leave_comment "Line is wrong" | |
125 | + end | |
126 | + | |
127 | + step 'I leave a comment like "Line is wrong" on line 185 of the first file in commit' do | |
128 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | |
129 | + leave_comment "Line is wrong" | |
130 | + end | |
131 | + | |
132 | + step 'I should see a discussion has started on line 185' do | |
133 | + page.should have_content "#{current_user.name} started a discussion on this merge request diff" | |
134 | + page.should have_content "app/assets/stylesheets/tree.scss:L185" | |
135 | + page.should have_content "Line is wrong" | |
136 | + end | |
137 | + | |
138 | + step 'I should see a discussion has started on commit b1e6a9dbf1:L185' do | |
139 | + page.should have_content "#{current_user.name} started a discussion on commit" | |
140 | + page.should have_content "app/assets/stylesheets/tree.scss:L185" | |
141 | + page.should have_content "Line is wrong" | |
142 | + end | |
143 | + | |
144 | + step 'I should see a discussion has started on commit b1e6a9dbf1' do | |
145 | + page.should have_content "#{current_user.name} started a discussion on commit" | |
146 | + page.should have_content "One comment to rule them all" | |
147 | + page.should have_content "app/assets/stylesheets/tree.scss:L185" | |
148 | + end | |
149 | + | |
150 | + step 'merge request is mergeable' do | |
151 | + page.should have_content 'You can accept this request automatically' | |
152 | + end | |
153 | + | |
154 | + step 'I modify merge commit message' do | |
155 | + find('.modify-merge-commit-link').click | |
156 | + fill_in 'merge_commit_message', with: "wow such merge" | |
157 | + end | |
158 | + | |
159 | + step 'merge request "Bug NS-05" is mergeable' do | |
160 | + merge_request.mark_as_mergeable | |
161 | + end | |
162 | + | |
163 | + step 'I accept this merge request' do | |
164 | + click_button "Accept Merge Request" | |
165 | + end | |
166 | + | |
167 | + step 'I should see merged request' do | |
168 | + within '.issue-box' do | |
169 | + page.should have_content "Merged" | |
170 | + end | |
171 | + end | |
172 | + | |
173 | + def project | |
174 | + @project ||= Project.find_by!(name: "Shop") | |
175 | + end | |
176 | + | |
177 | + def merge_request | |
178 | + @merge_request ||= MergeRequest.find_by!(title: "Bug NS-05") | |
179 | + end | |
180 | + | |
181 | + def init_diff_note | |
182 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185"]').click | |
183 | + end | |
184 | + | |
185 | + def leave_comment(message) | |
186 | + within(".js-discussion-note-form") do | |
187 | + fill_in "note_note", with: message | |
188 | + click_button "Add Comment" | |
189 | + end | |
190 | + | |
191 | + within ".note-text" do | |
192 | + page.should have_content message | |
193 | + end | |
194 | + end | |
195 | +end | ... | ... |
... | ... | @@ -0,0 +1,59 @@ |
1 | +class ProjectMilestones < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + include SharedMarkdown | |
6 | + | |
7 | + Then 'I should see milestone "v2.2"' do | |
8 | + milestone = @project.milestones.find_by(title: "v2.2") | |
9 | + page.should have_content(milestone.title[0..10]) | |
10 | + page.should have_content(milestone.expires_at) | |
11 | + page.should have_content("Browse Issues") | |
12 | + end | |
13 | + | |
14 | + Given 'I click link "v2.2"' do | |
15 | + click_link "v2.2" | |
16 | + end | |
17 | + | |
18 | + Given 'I click link "New Milestone"' do | |
19 | + click_link "New Milestone" | |
20 | + end | |
21 | + | |
22 | + And 'I submit new milestone "v2.3"' do | |
23 | + fill_in "milestone_title", with: "v2.3" | |
24 | + click_button "Create milestone" | |
25 | + end | |
26 | + | |
27 | + Then 'I should see milestone "v2.3"' do | |
28 | + milestone = @project.milestones.find_by(title: "v2.3") | |
29 | + page.should have_content(milestone.title[0..10]) | |
30 | + page.should have_content(milestone.expires_at) | |
31 | + page.should have_content("Browse Issues") | |
32 | + end | |
33 | + | |
34 | + And 'project "Shop" has milestone "v2.2"' do | |
35 | + project = Project.find_by(name: "Shop") | |
36 | + milestone = create(:milestone, | |
37 | + title: "v2.2", | |
38 | + project: project, | |
39 | + description: "# Description header" | |
40 | + ) | |
41 | + 3.times { create(:issue, project: project, milestone: milestone) } | |
42 | + end | |
43 | + | |
44 | + Given 'the milestone has open and closed issues' do | |
45 | + project = Project.find_by(name: "Shop") | |
46 | + milestone = project.milestones.find_by(title: 'v2.2') | |
47 | + | |
48 | + # 3 Open issues created above; create one closed issue | |
49 | + create(:closed_issue, project: project, milestone: milestone) | |
50 | + end | |
51 | + | |
52 | + When 'I click link "All Issues"' do | |
53 | + click_link 'All Issues' | |
54 | + end | |
55 | + | |
56 | + Then "I should see 3 issues" do | |
57 | + page.should have_selector('#tab-issues li', count: 4) | |
58 | + end | |
59 | +end | ... | ... |
... | ... | @@ -0,0 +1,58 @@ |
1 | +class ProjectMultiselectBlob < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedProject | |
4 | + include SharedPaths | |
5 | + | |
6 | + class << self | |
7 | + def click_line_steps(*line_numbers) | |
8 | + line_numbers.each do |line_number| | |
9 | + step "I click line #{line_number} in file" do | |
10 | + find("#L#{line_number}").click | |
11 | + end | |
12 | + | |
13 | + step "I shift-click line #{line_number} in file" do | |
14 | + script = "$('#L#{line_number}').trigger($.Event('click', { shiftKey: true }));" | |
15 | + page.evaluate_script(script) | |
16 | + end | |
17 | + end | |
18 | + end | |
19 | + | |
20 | + def check_state_steps(*ranges) | |
21 | + ranges.each do |range| | |
22 | + fragment = range.kind_of?(Array) ? "L#{range.first}-#{range.last}" : "L#{range}" | |
23 | + pluralization = range.kind_of?(Array) ? "s" : "" | |
24 | + | |
25 | + step "I should see \"#{fragment}\" as URI fragment" do | |
26 | + URI.parse(current_url).fragment.should == fragment | |
27 | + end | |
28 | + | |
29 | + step "I should see line#{pluralization} #{fragment[1..-1]} highlighted" do | |
30 | + ids = Array(range).map { |n| "LC#{n}" } | |
31 | + extra = false | |
32 | + | |
33 | + highlighted = all("#tree-content-holder .highlight .line.hll") | |
34 | + highlighted.each do |element| | |
35 | + extra ||= ids.delete(element[:id]).nil? | |
36 | + end | |
37 | + | |
38 | + extra.should be_false and ids.should be_empty | |
39 | + end | |
40 | + end | |
41 | + end | |
42 | + end | |
43 | + | |
44 | + click_line_steps *Array(1..5) | |
45 | + check_state_steps *Array(1..5), Array(1..2), Array(1..3), Array(1..4), Array(1..5), Array(3..5) | |
46 | + | |
47 | + step 'I go back in history' do | |
48 | + page.evaluate_script("window.history.back()") | |
49 | + end | |
50 | + | |
51 | + step 'I go forward in history' do | |
52 | + page.evaluate_script("window.history.forward()") | |
53 | + end | |
54 | + | |
55 | + step 'I click on "Gemfile.lock" file in repo' do | |
56 | + click_link "Gemfile.lock" | |
57 | + end | |
58 | +end | |
0 | 59 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,93 @@ |
1 | +class ProjectNetworkGraph < Spinach::FeatureSteps | |
2 | + include SharedAuthentication | |
3 | + include SharedPaths | |
4 | + include SharedProject | |
5 | + | |
6 | + Then 'page should have network graph' do | |
7 | + page.should have_selector ".network-graph" | |
8 | + end | |
9 | + | |
10 | + When 'I visit project "Shop" network page' do | |
11 | + # Stub Graph max_size to speed up test (10 commits vs. 650) | |
12 | + Network::Graph.stub(max_count: 10) | |
13 | + | |
14 | + project = Project.find_by(name: "Shop") | |
15 | + visit project_network_path(project, "master") | |
16 | + end | |
17 | + | |
18 | + And 'page should select "master" in select box' do | |
19 | + page.should have_selector '.select2-chosen', text: "master" | |
20 | + end | |
21 | + | |
22 | + And 'page should select "v2.1.0" in select box' do | |
23 | + page.should have_selector '.select2-chosen', text: "v2.1.0" | |
24 | + end | |
25 | + | |
26 | + And 'page should have "master" on graph' do | |
27 | + within '.network-graph' do | |
28 | + page.should have_content 'master' | |
29 | + end | |
30 | + end | |
31 | + | |
32 | + When 'I switch ref to "stable"' do | |
33 | + page.select 'stable', from: 'ref' | |
34 | + sleep 2 | |
35 | + end | |
36 | + | |
37 | + When 'I switch ref to "v2.1.0"' do | |
38 | + page.select 'v2.1.0', from: 'ref' | |
39 | + sleep 2 | |
40 | + end | |
41 | + | |
42 | + When 'click "Show only selected branch" checkbox' do | |
43 | + find('#filter_ref').click | |
44 | + sleep 2 | |
45 | + end | |
46 | + | |
47 | + Then 'page should have content not containing "v2.1.0"' do | |
48 | + within '.network-graph' do | |
49 | + page.should have_content 'cleaning' | |
50 | + end | |
51 | + end | |
52 | + | |
53 | + Then 'page should not have content not containing "v2.1.0"' do | |
54 | + within '.network-graph' do | |
55 | + page.should_not have_content 'cleaning' | |
56 | + end | |
57 | + end | |
58 | + | |
59 | + And 'page should select "stable" in select box' do | |
60 | + page.should have_selector '.select2-chosen', text: "stable" | |
61 | + end | |
62 | + | |
63 | + And 'page should select "v2.1.0" in select box' do | |
64 | + page.should have_selector '.select2-chosen', text: "v2.1.0" | |
65 | + end | |
66 | + | |
67 | + And 'page should have "stable" on graph' do | |
68 | + within '.network-graph' do | |
69 | + page.should have_content 'stable' | |
70 | + end | |
71 | + end | |
72 | + | |
73 | + When 'I looking for a commit by SHA of "v2.1.0"' do | |
74 | + within ".network-form" do | |
75 | + fill_in 'extended_sha1', with: '98d6492' | |
76 | + find('button').click | |
77 | + end | |
78 | + sleep 2 | |
79 | + end | |
80 | + | |
81 | + And 'page should have "v2.1.0" on graph' do | |
82 | + within '.network-graph' do | |
83 | + page.should have_content 'v2.1.0' | |
84 | + end | |
85 | + end | |
86 | + | |
87 | + When 'I look for a commit by ";"' do | |
88 | + within ".network-form" do | |
89 | + fill_in 'extended_sha1', with: ';' | |
90 | + find('button').click | |
91 | + end | |
92 | + end | |
93 | +end | ... | ... |
features/steps/project/project_active_tab.rb
... | ... | @@ -1,140 +0,0 @@ |
1 | -class ProjectActiveTab < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedProject | |
5 | - include SharedActiveTab | |
6 | - | |
7 | - # Main Tabs | |
8 | - | |
9 | - Then 'the active main tab should be Home' do | |
10 | - ensure_active_main_tab('Home') | |
11 | - end | |
12 | - | |
13 | - Then 'the active main tab should be Settings' do | |
14 | - ensure_active_main_tab('Settings') | |
15 | - end | |
16 | - | |
17 | - Then 'the active main tab should be Files' do | |
18 | - ensure_active_main_tab('Files') | |
19 | - end | |
20 | - | |
21 | - Then 'the active main tab should be Commits' do | |
22 | - ensure_active_main_tab('Commits') | |
23 | - end | |
24 | - | |
25 | - Then 'the active main tab should be Network' do | |
26 | - ensure_active_main_tab('Network') | |
27 | - end | |
28 | - | |
29 | - Then 'the active main tab should be Issues' do | |
30 | - ensure_active_main_tab('Issues') | |
31 | - end | |
32 | - | |
33 | - Then 'the active main tab should be Merge Requests' do | |
34 | - ensure_active_main_tab('Merge Requests') | |
35 | - end | |
36 | - | |
37 | - Then 'the active main tab should be Wall' do | |
38 | - ensure_active_main_tab('Wall') | |
39 | - end | |
40 | - | |
41 | - Then 'the active main tab should be Wiki' do | |
42 | - ensure_active_main_tab('Wiki') | |
43 | - end | |
44 | - | |
45 | - # Sub Tabs: Home | |
46 | - | |
47 | - Given 'I click the "Team" tab' do | |
48 | - click_link('Members') | |
49 | - end | |
50 | - | |
51 | - Given 'I click the "Attachments" tab' do | |
52 | - click_link('Attachments') | |
53 | - end | |
54 | - | |
55 | - Given 'I click the "Snippets" tab' do | |
56 | - click_link('Snippets') | |
57 | - end | |
58 | - | |
59 | - Given 'I click the "Edit" tab' do | |
60 | - within '.project-settings-nav' do | |
61 | - click_link('Project') | |
62 | - end | |
63 | - end | |
64 | - | |
65 | - Given 'I click the "Hooks" tab' do | |
66 | - click_link('Web Hooks') | |
67 | - end | |
68 | - | |
69 | - Given 'I click the "Deploy Keys" tab' do | |
70 | - click_link('Deploy Keys') | |
71 | - end | |
72 | - | |
73 | - Then 'the active sub nav should be Team' do | |
74 | - ensure_active_sub_nav('Members') | |
75 | - end | |
76 | - | |
77 | - Then 'the active sub nav should be Edit' do | |
78 | - ensure_active_sub_nav('Project') | |
79 | - end | |
80 | - | |
81 | - Then 'the active sub nav should be Hooks' do | |
82 | - ensure_active_sub_nav('Web Hooks') | |
83 | - end | |
84 | - | |
85 | - Then 'the active sub nav should be Deploy Keys' do | |
86 | - ensure_active_sub_nav('Deploy Keys') | |
87 | - end | |
88 | - | |
89 | - # Sub Tabs: Commits | |
90 | - | |
91 | - Given 'I click the "Compare" tab' do | |
92 | - click_link('Compare') | |
93 | - end | |
94 | - | |
95 | - Given 'I click the "Branches" tab' do | |
96 | - click_link('Branches') | |
97 | - end | |
98 | - | |
99 | - Given 'I click the "Tags" tab' do | |
100 | - click_link('Tags') | |
101 | - end | |
102 | - | |
103 | - Then 'the active sub tab should be Commits' do | |
104 | - ensure_active_sub_tab('Commits') | |
105 | - end | |
106 | - | |
107 | - Then 'the active sub tab should be Compare' do | |
108 | - ensure_active_sub_tab('Compare') | |
109 | - end | |
110 | - | |
111 | - Then 'the active sub tab should be Branches' do | |
112 | - ensure_active_sub_tab('Branches') | |
113 | - end | |
114 | - | |
115 | - Then 'the active sub tab should be Tags' do | |
116 | - ensure_active_sub_tab('Tags') | |
117 | - end | |
118 | - | |
119 | - # Sub Tabs: Issues | |
120 | - | |
121 | - Given 'I click the "Milestones" tab' do | |
122 | - click_link('Milestones') | |
123 | - end | |
124 | - | |
125 | - Given 'I click the "Labels" tab' do | |
126 | - click_link('Labels') | |
127 | - end | |
128 | - | |
129 | - Then 'the active sub tab should be Browse Issues' do | |
130 | - ensure_active_sub_tab('Browse Issues') | |
131 | - end | |
132 | - | |
133 | - Then 'the active sub tab should be Milestones' do | |
134 | - ensure_active_sub_tab('Milestones') | |
135 | - end | |
136 | - | |
137 | - Then 'the active sub tab should be Labels' do | |
138 | - ensure_active_sub_tab('Labels') | |
139 | - end | |
140 | -end |
features/steps/project/project_archived.rb
... | ... | @@ -1,37 +0,0 @@ |
1 | -class ProjectArchived < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - When 'project "Forum" is archived' do | |
7 | - project = Project.find_by(name: "Forum") | |
8 | - project.update_attribute(:archived, true) | |
9 | - end | |
10 | - | |
11 | - When 'project "Shop" is archived' do | |
12 | - project = Project.find_by(name: "Shop") | |
13 | - project.update_attribute(:archived, true) | |
14 | - end | |
15 | - | |
16 | - When 'I visit project "Forum" page' do | |
17 | - project = Project.find_by(name: "Forum") | |
18 | - visit project_path(project) | |
19 | - end | |
20 | - | |
21 | - Then 'I should not see "Archived"' do | |
22 | - page.should_not have_content "Archived" | |
23 | - end | |
24 | - | |
25 | - Then 'I should see "Archived"' do | |
26 | - page.should have_content "Archived" | |
27 | - end | |
28 | - | |
29 | - When 'I set project archived' do | |
30 | - click_link "Archive" | |
31 | - end | |
32 | - | |
33 | - When 'I set project unarchived' do | |
34 | - click_link "Unarchive" | |
35 | - end | |
36 | - | |
37 | -end | |
38 | 0 | \ No newline at end of file |
features/steps/project/project_browse_branches.rb
... | ... | @@ -1,35 +0,0 @@ |
1 | -class ProjectBrowseBranches < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - Then 'I should see "Shop" recent branches list' do | |
7 | - page.should have_content "Branches" | |
8 | - page.should have_content "master" | |
9 | - end | |
10 | - | |
11 | - Given 'I click link "All"' do | |
12 | - click_link "All" | |
13 | - end | |
14 | - | |
15 | - Then 'I should see "Shop" all branches list' do | |
16 | - page.should have_content "Branches" | |
17 | - page.should have_content "master" | |
18 | - end | |
19 | - | |
20 | - Given 'I click link "Protected"' do | |
21 | - click_link "Protected" | |
22 | - end | |
23 | - | |
24 | - Then 'I should see "Shop" protected branches list' do | |
25 | - within ".protected-branches-list" do | |
26 | - page.should have_content "stable" | |
27 | - page.should_not have_content "master" | |
28 | - end | |
29 | - end | |
30 | - | |
31 | - And 'project "Shop" has protected branches' do | |
32 | - project = Project.find_by(name: "Shop") | |
33 | - project.protected_branches.create(name: "stable") | |
34 | - end | |
35 | -end |
features/steps/project/project_browse_commits.rb
... | ... | @@ -1,104 +0,0 @@ |
1 | -class ProjectBrowseCommits < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - Then 'I see project commits' do | |
7 | - commit = @project.repository.commit | |
8 | - page.should have_content(@project.name) | |
9 | - page.should have_content(commit.message) | |
10 | - page.should have_content(commit.id.to_s[0..5]) | |
11 | - end | |
12 | - | |
13 | - Given 'I click atom feed link' do | |
14 | - click_link "Feed" | |
15 | - end | |
16 | - | |
17 | - Then 'I see commits atom feed' do | |
18 | - commit = @project.repository.commit | |
19 | - page.response_headers['Content-Type'].should have_content("application/atom+xml") | |
20 | - page.body.should have_selector("title", text: "Recent commits to #{@project.name}") | |
21 | - page.body.should have_selector("author email", text: commit.author_email) | |
22 | - page.body.should have_selector("entry summary", text: commit.description) | |
23 | - end | |
24 | - | |
25 | - Given 'I click on commit link' do | |
26 | - visit project_commit_path(@project, ValidCommit::ID) | |
27 | - end | |
28 | - | |
29 | - Then 'I see commit info' do | |
30 | - page.should have_content ValidCommit::MESSAGE | |
31 | - page.should have_content "Showing 1 changed file" | |
32 | - end | |
33 | - | |
34 | - And 'I fill compare fields with refs' do | |
35 | - fill_in "from", with: "8716fc78f3c65bbf7bcf7b574febd583bc5d2812" | |
36 | - fill_in "to", with: "bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a" | |
37 | - click_button "Compare" | |
38 | - end | |
39 | - | |
40 | - Then 'I see compared refs' do | |
41 | - page.should have_content "Compare View" | |
42 | - page.should have_content "Commits (1)" | |
43 | - page.should have_content "Showing 2 changed files" | |
44 | - end | |
45 | - | |
46 | - Then 'I see breadcrumb links' do | |
47 | - page.should have_selector('ul.breadcrumb') | |
48 | - page.should have_selector('ul.breadcrumb span.divider', count: 3) | |
49 | - page.should have_selector('ul.breadcrumb a', count: 4) | |
50 | - | |
51 | - find('ul.breadcrumb li:nth-child(2) a')['href'].should match(/#{@project.path_with_namespace}\/commits\/master\z/) | |
52 | - find('ul.breadcrumb li:last a')['href'].should match(%r{master/app/models/project\.rb\z}) | |
53 | - end | |
54 | - | |
55 | - Then 'I see commits stats' do | |
56 | - page.should have_content 'Top 50 Committers' | |
57 | - page.should have_content 'Committers' | |
58 | - page.should have_content 'Total commits' | |
59 | - page.should have_content 'Authors' | |
60 | - end | |
61 | - | |
62 | - Given 'I visit big commit page' do | |
63 | - visit project_commit_path(@project, BigCommits::BIG_COMMIT_ID) | |
64 | - end | |
65 | - | |
66 | - Then 'I see big commit warning' do | |
67 | - page.should have_content BigCommits::BIG_COMMIT_MESSAGE | |
68 | - page.should have_content "Warning! This is a large diff" | |
69 | - page.should have_content "If you still want to see the diff" | |
70 | - end | |
71 | - | |
72 | - Given 'I visit huge commit page' do | |
73 | - visit project_commit_path(@project, BigCommits::HUGE_COMMIT_ID) | |
74 | - end | |
75 | - | |
76 | - Then 'I see huge commit message' do | |
77 | - page.should have_content BigCommits::HUGE_COMMIT_MESSAGE | |
78 | - page.should have_content "Warning! This is a large diff" | |
79 | - page.should_not have_content "If you still want to see the diff" | |
80 | - end | |
81 | - | |
82 | - Given 'I visit a commit with an image that changed' do | |
83 | - visit project_commit_path(@project, 'cc1ba255d6c5ffdce87a357ba7ccc397a4f4026b') | |
84 | - end | |
85 | - | |
86 | - Then 'The diff links to both the previous and current image' do | |
87 | - links = page.all('.two-up span div a') | |
88 | - links[0]['href'].should =~ %r{blob/bc3735004cb45cec5e0e4fa92710897a910a5957} | |
89 | - links[1]['href'].should =~ %r{blob/cc1ba255d6c5ffdce87a357ba7ccc397a4f4026b} | |
90 | - end | |
91 | - | |
92 | - Given 'I click side-by-side diff button' do | |
93 | - click_link "Side-by-side Diff" | |
94 | - end | |
95 | - | |
96 | - Then 'I see side-by-side diff button' do | |
97 | - page.should have_content "Side-by-side Diff" | |
98 | - end | |
99 | - | |
100 | - Then 'I see inline diff button' do | |
101 | - page.should have_content "Inline Diff" | |
102 | - end | |
103 | - | |
104 | -end |
features/steps/project/project_browse_commits_user_lookup.rb
... | ... | @@ -1,35 +0,0 @@ |
1 | -class ProjectBrowseCommitsUserLookup < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - Given 'I have the user that authored the commits' do | |
7 | - @user = create(:user, email: 'dmitriy.zaporozhets@gmail.com') | |
8 | - create(:email, { user: @user, email: 'dzaporozhets@sphereconsultinginc.com' }) | |
9 | - end | |
10 | - | |
11 | - Given 'I click on commit link' do | |
12 | - visit project_commit_path(@project, ValidCommit::ID) | |
13 | - end | |
14 | - | |
15 | - Given 'I click on another commit link' do | |
16 | - visit project_commit_path(@project, ValidCommitWithAltEmail::ID) | |
17 | - end | |
18 | - | |
19 | - Then 'I see commit info' do | |
20 | - page.should have_content ValidCommit::MESSAGE | |
21 | - check_author_link(ValidCommit::AUTHOR_EMAIL) | |
22 | - end | |
23 | - | |
24 | - Then 'I see other commit info' do | |
25 | - page.should have_content ValidCommitWithAltEmail::MESSAGE | |
26 | - check_author_link(ValidCommitWithAltEmail::AUTHOR_EMAIL) | |
27 | - end | |
28 | - | |
29 | - def check_author_link(email) | |
30 | - author_link = find('.commit-author-link') | |
31 | - author_link['href'].should == user_path(@user) | |
32 | - author_link['data-original-title'].should == email | |
33 | - find('.commit-author-name').text.should == @user.name | |
34 | - end | |
35 | -end |
features/steps/project/project_browse_files.rb
... | ... | @@ -1,53 +0,0 @@ |
1 | -class ProjectBrowseFiles < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - step 'I should see files from repository' do | |
7 | - page.should have_content "app" | |
8 | - page.should have_content "history" | |
9 | - page.should have_content "Gemfile" | |
10 | - end | |
11 | - | |
12 | - step 'I should see files from repository for "8470d70"' do | |
13 | - current_path.should == project_tree_path(@project, "8470d70") | |
14 | - page.should have_content "app" | |
15 | - page.should have_content "history" | |
16 | - page.should have_content "Gemfile" | |
17 | - end | |
18 | - | |
19 | - step 'I click on "Gemfile.lock" file in repo' do | |
20 | - click_link "Gemfile.lock" | |
21 | - end | |
22 | - | |
23 | - step 'I should see it content' do | |
24 | - page.should have_content "DEPENDENCIES" | |
25 | - end | |
26 | - | |
27 | - step 'I click link "raw"' do | |
28 | - click_link "raw" | |
29 | - end | |
30 | - | |
31 | - step 'I should see raw file content' do | |
32 | - page.source.should == ValidCommit::BLOB_FILE | |
33 | - end | |
34 | - | |
35 | - step 'I click button "edit"' do | |
36 | - click_link 'edit' | |
37 | - end | |
38 | - | |
39 | - step 'I can edit code' do | |
40 | - page.execute_script('editor.setValue("GitlabFileEditor")') | |
41 | - page.evaluate_script('editor.getValue()').should == "GitlabFileEditor" | |
42 | - end | |
43 | - | |
44 | - step 'I click on "new file" link in repo' do | |
45 | - click_link 'new-file-link' | |
46 | - end | |
47 | - | |
48 | - step 'I can see new file page' do | |
49 | - page.should have_content "New file" | |
50 | - page.should have_content "File name" | |
51 | - page.should have_content "Commit message" | |
52 | - end | |
53 | -end |
features/steps/project/project_browse_git_repo.rb
... | ... | @@ -1,19 +0,0 @@ |
1 | -class ProjectBrowseGitRepo < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - Given 'I click on "Gemfile.lock" file in repo' do | |
7 | - click_link "Gemfile.lock" | |
8 | - end | |
9 | - | |
10 | - And 'I click blame button' do | |
11 | - click_link "blame" | |
12 | - end | |
13 | - | |
14 | - Then 'I should see git file blame' do | |
15 | - page.should have_content "DEPENDENCIES" | |
16 | - page.should have_content "Dmitriy Zaporozhets" | |
17 | - page.should have_content "Moving to rails 3.2" | |
18 | - end | |
19 | -end |
features/steps/project/project_browse_tags.rb
... | ... | @@ -1,10 +0,0 @@ |
1 | -class ProjectBrowseTags < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - Then 'I should see "Shop" all tags list' do | |
7 | - page.should have_content "Tags" | |
8 | - page.should have_content "v1.2.1" | |
9 | - end | |
10 | -end |
features/steps/project/project_filter_labels.rb
... | ... | @@ -1,70 +0,0 @@ |
1 | -class ProjectFilterLabels < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - Then 'I should see "bug" in labels filter' do | |
7 | - within ".labels-filter" do | |
8 | - page.should have_content "bug" | |
9 | - end | |
10 | - end | |
11 | - | |
12 | - And 'I should see "feature" in labels filter' do | |
13 | - within ".labels-filter" do | |
14 | - page.should have_content "feature" | |
15 | - end | |
16 | - end | |
17 | - | |
18 | - And 'I should see "enhancement" in labels filter' do | |
19 | - within ".labels-filter" do | |
20 | - page.should have_content "enhancement" | |
21 | - end | |
22 | - end | |
23 | - | |
24 | - Then 'I should see "Bugfix1" in issues list' do | |
25 | - within ".issues-list" do | |
26 | - page.should have_content "Bugfix1" | |
27 | - end | |
28 | - end | |
29 | - | |
30 | - And 'I should see "Bugfix2" in issues list' do | |
31 | - within ".issues-list" do | |
32 | - page.should have_content "Bugfix2" | |
33 | - end | |
34 | - end | |
35 | - | |
36 | - And 'I should not see "Bugfix2" in issues list' do | |
37 | - within ".issues-list" do | |
38 | - page.should_not have_content "Bugfix2" | |
39 | - end | |
40 | - end | |
41 | - | |
42 | - And 'I should not see "Feature1" in issues list' do | |
43 | - within ".issues-list" do | |
44 | - page.should_not have_content "Feature1" | |
45 | - end | |
46 | - end | |
47 | - | |
48 | - Given 'I click link "bug"' do | |
49 | - click_link "bug" | |
50 | - end | |
51 | - | |
52 | - Given 'I click link "feature"' do | |
53 | - click_link "feature" | |
54 | - end | |
55 | - | |
56 | - And 'project "Shop" has issue "Bugfix1" with tags: "bug", "feature"' do | |
57 | - project = Project.find_by(name: "Shop") | |
58 | - create(:issue, title: "Bugfix1", project: project, label_list: ['bug', 'feature']) | |
59 | - end | |
60 | - | |
61 | - And 'project "Shop" has issue "Bugfix2" with tags: "bug", "enhancement"' do | |
62 | - project = Project.find_by(name: "Shop") | |
63 | - create(:issue, title: "Bugfix2", project: project, label_list: ['bug', 'enhancement']) | |
64 | - end | |
65 | - | |
66 | - And 'project "Shop" has issue "Feature1" with tags: "feature"' do | |
67 | - project = Project.find_by(name: "Shop") | |
68 | - create(:issue, title: "Feature1", project: project, label_list: 'feature') | |
69 | - end | |
70 | -end |
features/steps/project/project_fork.rb
... | ... | @@ -1,36 +0,0 @@ |
1 | -class ForkProject < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedProject | |
5 | - | |
6 | - step 'I click link "Fork"' do | |
7 | - page.should have_content "Shop" | |
8 | - page.should have_content "Fork" | |
9 | - Gitlab::Shell.any_instance.stub(:fork_repository).and_return(true) | |
10 | - click_link "Fork" | |
11 | - end | |
12 | - | |
13 | - step 'I am a member of project "Shop"' do | |
14 | - @project = Project.find_by(name: "Shop") | |
15 | - @project ||= create(:project, name: "Shop", group: create(:group)) | |
16 | - @project.team << [@user, :reporter] | |
17 | - end | |
18 | - | |
19 | - step 'I should see the forked project page' do | |
20 | - page.should have_content "Project was successfully forked." | |
21 | - current_path.should include current_user.namespace.path | |
22 | - @forked_project = Project.find_by(namespace_id: current_user.namespace.path) | |
23 | - end | |
24 | - | |
25 | - step 'I already have a project named "Shop" in my namespace' do | |
26 | - current_user.namespace ||= create(:namespace) | |
27 | - current_user.namespace.should_not be_nil | |
28 | - current_user.namespace.path.should_not be_nil | |
29 | - @my_project = create(:project, name: "Shop", namespace: current_user.namespace) | |
30 | - end | |
31 | - | |
32 | - step 'I should see a "Name has already been taken" warning' do | |
33 | - page.should have_content "Name has already been taken" | |
34 | - end | |
35 | - | |
36 | -end |
features/steps/project/project_forked_merge_requests.rb
... | ... | @@ -1,183 +0,0 @@ |
1 | -class ProjectForkedMergeRequests < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedNote | |
5 | - include SharedPaths | |
6 | - include Select2Helper | |
7 | - | |
8 | - step 'I am a member of project "Shop"' do | |
9 | - @project = Project.find_by(name: "Shop") | |
10 | - @project ||= create(:project, name: "Shop") | |
11 | - @project.team << [@user, :reporter] | |
12 | - end | |
13 | - | |
14 | - step 'I have a project forked off of "Shop" called "Forked Shop"' do | |
15 | - @forking_user = @user | |
16 | - forked_project_link = build(:forked_project_link) | |
17 | - @forked_project = Project.find_by(name: "Forked Shop") | |
18 | - @forked_project ||= create(:project, name: "Forked Shop", forked_project_link: forked_project_link, creator_id: @forking_user.id , namespace: @forking_user.namespace) | |
19 | - | |
20 | - forked_project_link.forked_from_project = @project | |
21 | - forked_project_link.forked_to_project = @forked_project | |
22 | - @forked_project.team << [@forking_user , :master] | |
23 | - forked_project_link.save! | |
24 | - end | |
25 | - | |
26 | - step 'I click link "New Merge Request"' do | |
27 | - click_link "New Merge Request" | |
28 | - end | |
29 | - | |
30 | - step 'I should see merge request "Merge Request On Forked Project"' do | |
31 | - @project.merge_requests.size.should >= 1 | |
32 | - @merge_request = @project.merge_requests.last | |
33 | - current_path.should == project_merge_request_path(@project, @merge_request) | |
34 | - @merge_request.title.should == "Merge Request On Forked Project" | |
35 | - @merge_request.source_project.should == @forked_project | |
36 | - @merge_request.source_branch.should == "master" | |
37 | - @merge_request.target_branch.should == "stable" | |
38 | - page.should have_content @forked_project.path_with_namespace | |
39 | - page.should have_content @project.path_with_namespace | |
40 | - page.should have_content @merge_request.source_branch | |
41 | - page.should have_content @merge_request.target_branch | |
42 | - end | |
43 | - | |
44 | - step 'I fill out a "Merge Request On Forked Project" merge request' do | |
45 | - select2 @forked_project.id, from: "#merge_request_source_project_id" | |
46 | - select2 @project.id, from: "#merge_request_target_project_id" | |
47 | - | |
48 | - find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s | |
49 | - find(:select, "merge_request_target_project_id", {}).value.should == @project.id.to_s | |
50 | - | |
51 | - select2 "master", from: "#merge_request_source_branch" | |
52 | - select2 "stable", from: "#merge_request_target_branch" | |
53 | - | |
54 | - find(:select, "merge_request_source_branch", {}).value.should == 'master' | |
55 | - find(:select, "merge_request_target_branch", {}).value.should == 'stable' | |
56 | - | |
57 | - fill_in "merge_request_title", with: "Merge Request On Forked Project" | |
58 | - end | |
59 | - | |
60 | - step 'I submit the merge request' do | |
61 | - click_button "Submit merge request" | |
62 | - end | |
63 | - | |
64 | - step 'I follow the target commit link' do | |
65 | - commit = @project.repository.commit | |
66 | - click_link commit.short_id(8) | |
67 | - end | |
68 | - | |
69 | - step 'I should see the commit under the forked from project' do | |
70 | - commit = @project.repository.commit | |
71 | - page.should have_content(commit.message) | |
72 | - end | |
73 | - | |
74 | - step 'I click "Create Merge Request on fork" link' do | |
75 | - click_link "Create Merge Request on fork" | |
76 | - end | |
77 | - | |
78 | - step 'I see prefilled new Merge Request page for the forked project' do | |
79 | - current_path.should == new_project_merge_request_path(@forked_project) | |
80 | - find("#merge_request_source_project_id").value.should == @forked_project.id.to_s | |
81 | - find("#merge_request_target_project_id").value.should == @project.id.to_s | |
82 | - find("#merge_request_source_branch").value.should have_content "new_design" | |
83 | - find("#merge_request_target_branch").value.should have_content "master" | |
84 | - find("#merge_request_title").value.should == "New Design" | |
85 | - verify_commit_link(".mr_target_commit",@project) | |
86 | - verify_commit_link(".mr_source_commit",@forked_project) | |
87 | - end | |
88 | - | |
89 | - step 'I update the merge request title' do | |
90 | - fill_in "merge_request_title", with: "An Edited Forked Merge Request" | |
91 | - end | |
92 | - | |
93 | - step 'I save the merge request' do | |
94 | - click_button "Save changes" | |
95 | - end | |
96 | - | |
97 | - step 'I should see the edited merge request' do | |
98 | - page.should have_content "An Edited Forked Merge Request" | |
99 | - @project.merge_requests.size.should >= 1 | |
100 | - @merge_request = @project.merge_requests.last | |
101 | - current_path.should == project_merge_request_path(@project, @merge_request) | |
102 | - @merge_request.source_project.should == @forked_project | |
103 | - @merge_request.source_branch.should == "master" | |
104 | - @merge_request.target_branch.should == "stable" | |
105 | - page.should have_content @forked_project.path_with_namespace | |
106 | - page.should have_content @project.path_with_namespace | |
107 | - page.should have_content @merge_request.source_branch | |
108 | - page.should have_content @merge_request.target_branch | |
109 | - end | |
110 | - | |
111 | - step 'I should see last push widget' do | |
112 | - page.should have_content "You pushed to new_design" | |
113 | - page.should have_link "Create Merge Request" | |
114 | - end | |
115 | - | |
116 | - step 'project "Forked Shop" has push event' do | |
117 | - @forked_project = Project.find_by(name: "Forked Shop") | |
118 | - | |
119 | - data = { | |
120 | - before: "0000000000000000000000000000000000000000", | |
121 | - after: "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e", | |
122 | - ref: "refs/heads/new_design", | |
123 | - user_id: @user.id, | |
124 | - user_name: @user.name, | |
125 | - repository: { | |
126 | - name: @forked_project.name, | |
127 | - url: "localhost/rubinius", | |
128 | - description: "", | |
129 | - homepage: "localhost/rubinius", | |
130 | - private: true | |
131 | - } | |
132 | - } | |
133 | - | |
134 | - @event = Event.create( | |
135 | - project: @forked_project, | |
136 | - action: Event::PUSHED, | |
137 | - data: data, | |
138 | - author_id: @user.id | |
139 | - ) | |
140 | - end | |
141 | - | |
142 | - | |
143 | - step 'I click link edit "Merge Request On Forked Project"' do | |
144 | - find("#edit_merge_request").click | |
145 | - end | |
146 | - | |
147 | - step 'I see the edit page prefilled for "Merge Request On Forked Project"' do | |
148 | - current_path.should == edit_project_merge_request_path(@project, @merge_request) | |
149 | - page.should have_content "Edit merge request ##{@merge_request.id}" | |
150 | - find("#merge_request_title").value.should == "Merge Request On Forked Project" | |
151 | - find("#merge_request_source_project_id").value.should == @forked_project.id.to_s | |
152 | - find("#merge_request_target_project_id").value.should == @project.id.to_s | |
153 | - find("#merge_request_source_branch").value.should have_content "master" | |
154 | - verify_commit_link(".mr_source_commit",@forked_project) | |
155 | - find("#merge_request_target_branch").value.should have_content "stable" | |
156 | - verify_commit_link(".mr_target_commit",@project) | |
157 | - end | |
158 | - | |
159 | - step 'I fill out an invalid "Merge Request On Forked Project" merge request' do | |
160 | - #If this isn't filled in the rest of the validations won't be triggered | |
161 | - fill_in "merge_request_title", with: "Merge Request On Forked Project" | |
162 | - find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s | |
163 | - find(:select, "merge_request_target_project_id", {}).value.should == @forked_project.id.to_s | |
164 | - find(:select, "merge_request_source_branch", {}).value.should == "" | |
165 | - find(:select, "merge_request_target_branch", {}).value.should == "" | |
166 | - end | |
167 | - | |
168 | - step 'I should see validation errors' do | |
169 | - page.should have_content "Source branch can't be blank" | |
170 | - page.should have_content "Target branch can't be blank" | |
171 | - page.should have_content "Branch conflict You can not use same project/branch for source and target" | |
172 | - end | |
173 | - | |
174 | - def project | |
175 | - @project ||= Project.find_by!(name: "Shop") | |
176 | - end | |
177 | - | |
178 | - # Verify a link is generated against the correct project | |
179 | - def verify_commit_link(container_div, container_project) | |
180 | - # This should force a wait for the javascript to execute | |
181 | - find(:div,container_div).find(".commit_short_id")['href'].should have_content "#{container_project.path_with_namespace}/commit" | |
182 | - end | |
183 | -end |
features/steps/project/project_graph.rb
... | ... | @@ -1,13 +0,0 @@ |
1 | -class ProjectGraph < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - | |
5 | - Then 'page should have graphs' do | |
6 | - page.should have_selector ".stat-graph" | |
7 | - end | |
8 | - | |
9 | - When 'I visit project "Shop" graph page' do | |
10 | - project = Project.find_by(name: "Shop") | |
11 | - visit project_graph_path(project, "master") | |
12 | - end | |
13 | -end |
features/steps/project/project_hooks.rb
... | ... | @@ -1,38 +0,0 @@ |
1 | -require 'webmock' | |
2 | - | |
3 | -class ProjectHooks < Spinach::FeatureSteps | |
4 | - include SharedAuthentication | |
5 | - include SharedProject | |
6 | - include SharedPaths | |
7 | - include RSpec::Matchers | |
8 | - include RSpec::Mocks::ExampleMethods | |
9 | - include WebMock::API | |
10 | - | |
11 | - Given 'project has hook' do | |
12 | - @hook = create(:project_hook, project: current_project) | |
13 | - end | |
14 | - | |
15 | - Then 'I should see project hook' do | |
16 | - page.should have_content @hook.url | |
17 | - end | |
18 | - | |
19 | - When 'I submit new hook' do | |
20 | - @url = Faker::Internet.uri("http") | |
21 | - fill_in "hook_url", with: @url | |
22 | - expect { click_button "Add Web Hook" }.to change(ProjectHook, :count).by(1) | |
23 | - end | |
24 | - | |
25 | - Then 'I should see newly created hook' do | |
26 | - page.current_path.should == project_hooks_path(current_project) | |
27 | - page.should have_content(@url) | |
28 | - end | |
29 | - | |
30 | - When 'I click test hook button' do | |
31 | - stub_request(:post, @hook.url).to_return(status: 200) | |
32 | - click_link 'Test Hook' | |
33 | - end | |
34 | - | |
35 | - Then 'hook should be triggered' do | |
36 | - page.current_path.should == project_hooks_path(current_project) | |
37 | - end | |
38 | -end |
features/steps/project/project_issue_tracker.rb
... | ... | @@ -1,31 +0,0 @@ |
1 | -class ProjectIssueTracker < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - step 'project "Shop" has issues enabled' do | |
7 | - @project = Project.find_by(name: "Shop") | |
8 | - @project ||= create(:project, name: "Shop", namespace: @user.namespace) | |
9 | - @project.issues_enabled = true | |
10 | - end | |
11 | - | |
12 | - step 'change the issue tracker to "GitLab"' do | |
13 | - select 'GitLab', from: 'project_issues_tracker' | |
14 | - end | |
15 | - | |
16 | - step 'I the project should have "GitLab" as issue tracker' do | |
17 | - find_field('project_issues_tracker').value.should == 'gitlab' | |
18 | - end | |
19 | - | |
20 | - step 'change the issue tracker to "Redmine"' do | |
21 | - select 'Redmine', from: 'project_issues_tracker' | |
22 | - end | |
23 | - | |
24 | - step 'I the project should have "Redmine" as issue tracker' do | |
25 | - find_field('project_issues_tracker').value.should == 'redmine' | |
26 | - end | |
27 | - | |
28 | - And 'I save project' do | |
29 | - click_button 'Save changes' | |
30 | - end | |
31 | -end |
features/steps/project/project_issues.rb
... | ... | @@ -1,145 +0,0 @@ |
1 | -class ProjectIssues < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedNote | |
5 | - include SharedPaths | |
6 | - include SharedMarkdown | |
7 | - | |
8 | - Given 'I should see "Release 0.4" in issues' do | |
9 | - page.should have_content "Release 0.4" | |
10 | - end | |
11 | - | |
12 | - And 'I should not see "Release 0.3" in issues' do | |
13 | - page.should_not have_content "Release 0.3" | |
14 | - end | |
15 | - | |
16 | - And 'I should not see "Tweet control" in issues' do | |
17 | - page.should_not have_content "Tweet control" | |
18 | - end | |
19 | - | |
20 | - Given 'I click link "Closed"' do | |
21 | - click_link "Closed" | |
22 | - end | |
23 | - | |
24 | - Then 'I should see "Release 0.3" in issues' do | |
25 | - page.should have_content "Release 0.3" | |
26 | - end | |
27 | - | |
28 | - And 'I should not see "Release 0.4" in issues' do | |
29 | - page.should_not have_content "Release 0.4" | |
30 | - end | |
31 | - | |
32 | - Given 'I click link "All"' do | |
33 | - click_link "All" | |
34 | - end | |
35 | - | |
36 | - Given 'I click link "Release 0.4"' do | |
37 | - click_link "Release 0.4" | |
38 | - end | |
39 | - | |
40 | - Then 'I should see issue "Release 0.4"' do | |
41 | - page.should have_content "Release 0.4" | |
42 | - end | |
43 | - | |
44 | - Given 'I click link "New Issue"' do | |
45 | - click_link "New Issue" | |
46 | - end | |
47 | - | |
48 | - And 'I submit new issue "500 error on profile"' do | |
49 | - fill_in "issue_title", with: "500 error on profile" | |
50 | - click_button "Submit new issue" | |
51 | - end | |
52 | - | |
53 | - Given 'I click link "500 error on profile"' do | |
54 | - click_link "500 error on profile" | |
55 | - end | |
56 | - | |
57 | - Then 'I should see issue "500 error on profile"' do | |
58 | - issue = Issue.find_by(title: "500 error on profile") | |
59 | - page.should have_content issue.title | |
60 | - page.should have_content issue.author_name | |
61 | - page.should have_content issue.project.name | |
62 | - end | |
63 | - | |
64 | - Given 'I fill in issue search with "Re"' do | |
65 | - fill_in 'issue_search', with: "Re" | |
66 | - end | |
67 | - | |
68 | - Given 'I fill in issue search with "Bu"' do | |
69 | - fill_in 'issue_search', with: "Bu" | |
70 | - end | |
71 | - | |
72 | - And 'I fill in issue search with ".3"' do | |
73 | - fill_in 'issue_search', with: ".3" | |
74 | - end | |
75 | - | |
76 | - And 'I fill in issue search with "Something"' do | |
77 | - fill_in 'issue_search', with: "Something" | |
78 | - end | |
79 | - | |
80 | - And 'I fill in issue search with ""' do | |
81 | - fill_in 'issue_search', with: "" | |
82 | - end | |
83 | - | |
84 | - Given 'project "Shop" has milestone "v2.2"' do | |
85 | - project = Project.find_by(name: "Shop") | |
86 | - milestone = create(:milestone, title: "v2.2", project: project) | |
87 | - | |
88 | - 3.times { create(:issue, project: project, milestone: milestone) } | |
89 | - end | |
90 | - | |
91 | - And 'project "Shop" has milestone "v3.0"' do | |
92 | - project = Project.find_by(name: "Shop") | |
93 | - milestone = create(:milestone, title: "v3.0", project: project) | |
94 | - | |
95 | - 3.times { create(:issue, project: project, milestone: milestone) } | |
96 | - end | |
97 | - | |
98 | - When 'I select milestone "v3.0"' do | |
99 | - select "v3.0", from: "milestone_id" | |
100 | - end | |
101 | - | |
102 | - Then 'I should see selected milestone with title "v3.0"' do | |
103 | - issues_milestone_selector = "#issue_milestone_id_chzn > a" | |
104 | - page.find(issues_milestone_selector).should have_content("v3.0") | |
105 | - end | |
106 | - | |
107 | - When 'I select first assignee from "Shop" project' do | |
108 | - project = Project.find_by(name: "Shop") | |
109 | - first_assignee = project.users.first | |
110 | - select first_assignee.name, from: "assignee_id" | |
111 | - end | |
112 | - | |
113 | - Then 'I should see first assignee from "Shop" as selected assignee' do | |
114 | - issues_assignee_selector = "#issue_assignee_id_chzn > a" | |
115 | - project = Project.find_by(name: "Shop") | |
116 | - assignee_name = project.users.first.name | |
117 | - page.find(issues_assignee_selector).should have_content(assignee_name) | |
118 | - end | |
119 | - | |
120 | - And 'project "Shop" have "Release 0.4" open issue' do | |
121 | - project = Project.find_by(name: "Shop") | |
122 | - create(:issue, | |
123 | - title: "Release 0.4", | |
124 | - project: project, | |
125 | - author: project.users.first, | |
126 | - description: "# Description header" | |
127 | - ) | |
128 | - end | |
129 | - | |
130 | - And 'project "Shop" have "Tweet control" open issue' do | |
131 | - project = Project.find_by(name: "Shop") | |
132 | - create(:issue, | |
133 | - title: "Tweet control", | |
134 | - project: project, | |
135 | - author: project.users.first) | |
136 | - end | |
137 | - | |
138 | - And 'project "Shop" have "Release 0.3" closed issue' do | |
139 | - project = Project.find_by(name: "Shop") | |
140 | - create(:closed_issue, | |
141 | - title: "Release 0.3", | |
142 | - project: project, | |
143 | - author: project.users.first) | |
144 | - end | |
145 | -end |
features/steps/project/project_labels.rb
... | ... | @@ -1,24 +0,0 @@ |
1 | -class ProjectLabels < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - Then 'I should see label "bug"' do | |
7 | - within ".labels-table" do | |
8 | - page.should have_content "bug" | |
9 | - end | |
10 | - end | |
11 | - | |
12 | - And 'I should see label "feature"' do | |
13 | - within ".labels-table" do | |
14 | - page.should have_content "feature" | |
15 | - end | |
16 | - end | |
17 | - | |
18 | - And 'project "Shop" have issues tags: "bug", "feature"' do | |
19 | - project = Project.find_by(name: "Shop") | |
20 | - ['bug', 'feature'].each do |label| | |
21 | - create(:issue, project: project, label_list: label) | |
22 | - end | |
23 | - end | |
24 | -end |
features/steps/project/project_markdown_render.rb
... | ... | @@ -1,207 +0,0 @@ |
1 | -class Spinach::Features::ProjectMarkdownRender < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedMarkdown | |
5 | - | |
6 | - And 'I own project "Delta"' do | |
7 | - @project = Project.find_by(name: "Delta") | |
8 | - @project ||= create(:project, name: "Delta", namespace: @user.namespace) | |
9 | - @project.team << [@user, :master] | |
10 | - end | |
11 | - | |
12 | - Then 'I should see files from repository in master' do | |
13 | - current_path.should == project_tree_path(@project, "master") | |
14 | - page.should have_content "Gemfile" | |
15 | - page.should have_content "app" | |
16 | - page.should have_content "README" | |
17 | - end | |
18 | - | |
19 | - And 'I should see rendered README which contains correct links' do | |
20 | - page.should have_content "Welcome to GitLab GitLab is a free project and repository management application" | |
21 | - page.should have_link "GitLab API doc" | |
22 | - page.should have_link "GitLab API website" | |
23 | - page.should have_link "Rake tasks" | |
24 | - page.should have_link "backup and restore procedure" | |
25 | - page.should have_link "GitLab API doc directory" | |
26 | - page.should have_link "Maintenance" | |
27 | - end | |
28 | - | |
29 | - And 'I click on Gitlab API in README' do | |
30 | - click_link "GitLab API doc" | |
31 | - end | |
32 | - | |
33 | - Then 'I should see correct document rendered' do | |
34 | - current_path.should == project_blob_path(@project, "master/doc/api/README.md") | |
35 | - page.should have_content "All API requests require authentication" | |
36 | - end | |
37 | - | |
38 | - And 'I click on Rake tasks in README' do | |
39 | - click_link "Rake tasks" | |
40 | - end | |
41 | - | |
42 | - Then 'I should see correct directory rendered' do | |
43 | - current_path.should == project_tree_path(@project, "master/doc/raketasks") | |
44 | - page.should have_content "backup_restore.md" | |
45 | - page.should have_content "maintenance.md" | |
46 | - end | |
47 | - | |
48 | - And 'I click on GitLab API doc directory in README' do | |
49 | - click_link "GitLab API doc directory" | |
50 | - end | |
51 | - | |
52 | - Then 'I should see correct doc/api directory rendered' do | |
53 | - current_path.should == project_tree_path(@project, "master/doc/api/") | |
54 | - page.should have_content "README.md" | |
55 | - page.should have_content "users.md" | |
56 | - end | |
57 | - | |
58 | - And 'I click on Maintenance in README' do | |
59 | - click_link "Maintenance" | |
60 | - end | |
61 | - | |
62 | - Then 'I should see correct maintenance file rendered' do | |
63 | - current_path.should == project_blob_path(@project, "master/doc/raketasks/maintenance.md") | |
64 | - page.should have_content "bundle exec rake gitlab:env:info RAILS_ENV=production" | |
65 | - end | |
66 | - | |
67 | - And 'I navigate to the doc/api/README' do | |
68 | - click_link "doc" | |
69 | - click_link "api" | |
70 | - click_link "README.md" | |
71 | - end | |
72 | - | |
73 | - And 'I see correct file rendered' do | |
74 | - current_path.should == project_blob_path(@project, "master/doc/api/README.md") | |
75 | - page.should have_content "Contents" | |
76 | - page.should have_link "Users" | |
77 | - page.should have_link "Rake tasks" | |
78 | - end | |
79 | - | |
80 | - And 'I click on users in doc/api/README' do | |
81 | - click_link "Users" | |
82 | - end | |
83 | - | |
84 | - Then 'I should see the correct document file' do | |
85 | - current_path.should == project_blob_path(@project, "master/doc/api/users.md") | |
86 | - page.should have_content "Get a list of users." | |
87 | - end | |
88 | - | |
89 | - And 'I click on raketasks in doc/api/README' do | |
90 | - click_link "Rake tasks" | |
91 | - end | |
92 | - | |
93 | - When 'I visit markdown branch' do | |
94 | - visit project_tree_path(@project, "markdown") | |
95 | - end | |
96 | - | |
97 | - Then 'I should see files from repository in markdown branch' do | |
98 | - current_path.should == project_tree_path(@project, "markdown") | |
99 | - page.should have_content "Gemfile" | |
100 | - page.should have_content "app" | |
101 | - page.should have_content "README" | |
102 | - end | |
103 | - | |
104 | - And 'I see correct file rendered in markdown branch' do | |
105 | - current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") | |
106 | - page.should have_content "Contents" | |
107 | - page.should have_link "Users" | |
108 | - page.should have_link "Rake tasks" | |
109 | - end | |
110 | - | |
111 | - Then 'I should see correct document rendered for markdown branch' do | |
112 | - current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") | |
113 | - page.should have_content "All API requests require authentication" | |
114 | - end | |
115 | - | |
116 | - Then 'I should see correct directory rendered for markdown branch' do | |
117 | - current_path.should == project_tree_path(@project, "markdown/doc/raketasks") | |
118 | - page.should have_content "backup_restore.md" | |
119 | - page.should have_content "maintenance.md" | |
120 | - end | |
121 | - | |
122 | - Then 'I should see the users document file in markdown branch' do | |
123 | - current_path.should == project_blob_path(@project, "markdown/doc/api/users.md") | |
124 | - page.should have_content "Get a list of users." | |
125 | - end | |
126 | - | |
127 | - Given 'I go to wiki page' do | |
128 | - click_link "Wiki" | |
129 | - current_path.should == project_wiki_path(@project, "home") | |
130 | - end | |
131 | - | |
132 | - And 'I add various links to the wiki page' do | |
133 | - fill_in "wiki[content]", with: "[test](test)\n[GitLab API doc](doc/api/README.md)\n[Rake tasks](doc/raketasks)\n" | |
134 | - fill_in "wiki[message]", with: "Adding links to wiki" | |
135 | - click_button "Create page" | |
136 | - end | |
137 | - | |
138 | - Then 'Wiki page should have added links' do | |
139 | - current_path.should == project_wiki_path(@project, "home") | |
140 | - page.should have_content "test GitLab API doc Rake tasks" | |
141 | - end | |
142 | - | |
143 | - step 'I add a header to the wiki page' do | |
144 | - fill_in "wiki[content]", with: "# Wiki header\n" | |
145 | - fill_in "wiki[message]", with: "Add header to wiki" | |
146 | - click_button "Create page" | |
147 | - end | |
148 | - | |
149 | - step 'Wiki header should have correct id and link' do | |
150 | - header_should_have_correct_id_and_link(1, 'Wiki header', 'wiki-header') | |
151 | - end | |
152 | - | |
153 | - And 'I click on test link' do | |
154 | - click_link "test" | |
155 | - end | |
156 | - | |
157 | - Then 'I see new wiki page named test' do | |
158 | - current_path.should == project_wiki_path(@project, "test") | |
159 | - page.should have_content "Editing" | |
160 | - end | |
161 | - | |
162 | - When 'I go back to wiki page home' do | |
163 | - visit project_wiki_path(@project, "home") | |
164 | - current_path.should == project_wiki_path(@project, "home") | |
165 | - end | |
166 | - | |
167 | - And 'I click on GitLab API doc link' do | |
168 | - click_link "GitLab API" | |
169 | - end | |
170 | - | |
171 | - Then 'I see Gitlab API document' do | |
172 | - current_path.should == project_blob_path(@project, "master/doc/api/README.md") | |
173 | - page.should have_content "Status codes" | |
174 | - end | |
175 | - | |
176 | - And 'I click on Rake tasks link' do | |
177 | - click_link "Rake tasks" | |
178 | - end | |
179 | - | |
180 | - Then 'I see Rake tasks directory' do | |
181 | - current_path.should == project_tree_path(@project, "master/doc/raketasks") | |
182 | - page.should have_content "backup_restore.md" | |
183 | - page.should have_content "maintenance.md" | |
184 | - end | |
185 | - | |
186 | - Given 'I go directory which contains README file' do | |
187 | - visit project_tree_path(@project, "master/doc/api") | |
188 | - current_path.should == project_tree_path(@project, "master/doc/api") | |
189 | - end | |
190 | - | |
191 | - And 'I click on a relative link in README' do | |
192 | - click_link "Users" | |
193 | - end | |
194 | - | |
195 | - Then 'I should see the correct markdown' do | |
196 | - current_path.should == project_blob_path(@project, "master/doc/api/users.md") | |
197 | - page.should have_content "List users" | |
198 | - end | |
199 | - | |
200 | - step 'Header "Application details" should have correct id and link' do | |
201 | - header_should_have_correct_id_and_link(2, 'Application details', 'application-details') | |
202 | - end | |
203 | - | |
204 | - step 'Header "GitLab API" should have correct id and link' do | |
205 | - header_should_have_correct_id_and_link(1, 'GitLab API', 'gitlab-api') | |
206 | - end | |
207 | -end |
features/steps/project/project_merge_requests.rb
... | ... | @@ -1,195 +0,0 @@ |
1 | -class ProjectMergeRequests < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedNote | |
5 | - include SharedPaths | |
6 | - include SharedMarkdown | |
7 | - | |
8 | - step 'I click link "New Merge Request"' do | |
9 | - click_link "New Merge Request" | |
10 | - end | |
11 | - | |
12 | - step 'I click link "Bug NS-04"' do | |
13 | - click_link "Bug NS-04" | |
14 | - end | |
15 | - | |
16 | - step 'I click link "All"' do | |
17 | - click_link "All" | |
18 | - end | |
19 | - | |
20 | - step 'I click link "Closed"' do | |
21 | - click_link "Closed" | |
22 | - end | |
23 | - | |
24 | - step 'I should see merge request "Wiki Feature"' do | |
25 | - within '.merge-request' do | |
26 | - page.should have_content "Wiki Feature" | |
27 | - end | |
28 | - end | |
29 | - | |
30 | - step 'I should see closed merge request "Bug NS-04"' do | |
31 | - merge_request = MergeRequest.find_by!(title: "Bug NS-04") | |
32 | - merge_request.closed?.should be_true | |
33 | - page.should have_content "Closed by" | |
34 | - end | |
35 | - | |
36 | - step 'I should see merge request "Bug NS-04"' do | |
37 | - page.should have_content "Bug NS-04" | |
38 | - end | |
39 | - | |
40 | - step 'I should see "Bug NS-04" in merge requests' do | |
41 | - page.should have_content "Bug NS-04" | |
42 | - end | |
43 | - | |
44 | - step 'I should see "Feature NS-03" in merge requests' do | |
45 | - page.should have_content "Feature NS-03" | |
46 | - end | |
47 | - | |
48 | - step 'I should not see "Feature NS-03" in merge requests' do | |
49 | - page.should_not have_content "Feature NS-03" | |
50 | - end | |
51 | - | |
52 | - | |
53 | - step 'I should not see "Bug NS-04" in merge requests' do | |
54 | - page.should_not have_content "Bug NS-04" | |
55 | - end | |
56 | - | |
57 | - step 'I click link "Close"' do | |
58 | - within '.page-title' do | |
59 | - click_link "Close" | |
60 | - end | |
61 | - end | |
62 | - | |
63 | - step 'I submit new merge request "Wiki Feature"' do | |
64 | - fill_in "merge_request_title", with: "Wiki Feature" | |
65 | - select "master", from: "merge_request_source_branch" | |
66 | - select "notes_refactoring", from: "merge_request_target_branch" | |
67 | - click_button "Submit merge request" | |
68 | - end | |
69 | - | |
70 | - step 'project "Shop" have "Bug NS-04" open merge request' do | |
71 | - create(:merge_request, | |
72 | - title: "Bug NS-04", | |
73 | - source_project: project, | |
74 | - target_project: project, | |
75 | - source_branch: 'stable', | |
76 | - target_branch: 'master', | |
77 | - author: project.users.first, | |
78 | - description: "# Description header" | |
79 | - ) | |
80 | - end | |
81 | - | |
82 | - step 'project "Shop" have "Bug NS-05" open merge request with diffs inside' do | |
83 | - create(:merge_request_with_diffs, | |
84 | - title: "Bug NS-05", | |
85 | - source_project: project, | |
86 | - target_project: project, | |
87 | - author: project.users.first) | |
88 | - end | |
89 | - | |
90 | - step 'project "Shop" have "Feature NS-03" closed merge request' do | |
91 | - create(:closed_merge_request, | |
92 | - title: "Feature NS-03", | |
93 | - source_project: project, | |
94 | - target_project: project, | |
95 | - author: project.users.first) | |
96 | - end | |
97 | - | |
98 | - step 'I switch to the diff tab' do | |
99 | - visit diffs_project_merge_request_path(project, merge_request) | |
100 | - end | |
101 | - | |
102 | - step 'I switch to the merge request\'s comments tab' do | |
103 | - visit project_merge_request_path(project, merge_request) | |
104 | - end | |
105 | - | |
106 | - step 'I click on the first commit in the merge request' do | |
107 | - within '.first-commits' do | |
108 | - click_link merge_request.commits.first.short_id(8) | |
109 | - end | |
110 | - end | |
111 | - | |
112 | - step 'I leave a comment on the diff page' do | |
113 | - init_diff_note | |
114 | - leave_comment "One comment to rule them all" | |
115 | - end | |
116 | - | |
117 | - step 'I leave a comment on the diff page in commit' do | |
118 | - find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | |
119 | - leave_comment "One comment to rule them all" | |
120 | - end | |
121 | - | |
122 | - step 'I leave a comment like "Line is wrong" on line 185 of the first file' do | |
123 | - init_diff_note | |
124 | - leave_comment "Line is wrong" | |
125 | - end | |
126 | - | |
127 | - step 'I leave a comment like "Line is wrong" on line 185 of the first file in commit' do | |
128 | - find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | |
129 | - leave_comment "Line is wrong" | |
130 | - end | |
131 | - | |
132 | - step 'I should see a discussion has started on line 185' do | |
133 | - page.should have_content "#{current_user.name} started a discussion on this merge request diff" | |
134 | - page.should have_content "app/assets/stylesheets/tree.scss:L185" | |
135 | - page.should have_content "Line is wrong" | |
136 | - end | |
137 | - | |
138 | - step 'I should see a discussion has started on commit b1e6a9dbf1:L185' do | |
139 | - page.should have_content "#{current_user.name} started a discussion on commit" | |
140 | - page.should have_content "app/assets/stylesheets/tree.scss:L185" | |
141 | - page.should have_content "Line is wrong" | |
142 | - end | |
143 | - | |
144 | - step 'I should see a discussion has started on commit b1e6a9dbf1' do | |
145 | - page.should have_content "#{current_user.name} started a discussion on commit" | |
146 | - page.should have_content "One comment to rule them all" | |
147 | - page.should have_content "app/assets/stylesheets/tree.scss:L185" | |
148 | - end | |
149 | - | |
150 | - step 'merge request is mergeable' do | |
151 | - page.should have_content 'You can accept this request automatically' | |
152 | - end | |
153 | - | |
154 | - step 'I modify merge commit message' do | |
155 | - find('.modify-merge-commit-link').click | |
156 | - fill_in 'merge_commit_message', with: "wow such merge" | |
157 | - end | |
158 | - | |
159 | - step 'merge request "Bug NS-05" is mergeable' do | |
160 | - merge_request.mark_as_mergeable | |
161 | - end | |
162 | - | |
163 | - step 'I accept this merge request' do | |
164 | - click_button "Accept Merge Request" | |
165 | - end | |
166 | - | |
167 | - step 'I should see merged request' do | |
168 | - within '.issue-box' do | |
169 | - page.should have_content "Merged" | |
170 | - end | |
171 | - end | |
172 | - | |
173 | - def project | |
174 | - @project ||= Project.find_by!(name: "Shop") | |
175 | - end | |
176 | - | |
177 | - def merge_request | |
178 | - @merge_request ||= MergeRequest.find_by!(title: "Bug NS-05") | |
179 | - end | |
180 | - | |
181 | - def init_diff_note | |
182 | - find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185"]').click | |
183 | - end | |
184 | - | |
185 | - def leave_comment(message) | |
186 | - within(".js-discussion-note-form") do | |
187 | - fill_in "note_note", with: message | |
188 | - click_button "Add Comment" | |
189 | - end | |
190 | - | |
191 | - within ".note-text" do | |
192 | - page.should have_content message | |
193 | - end | |
194 | - end | |
195 | -end |
features/steps/project/project_milestones.rb
... | ... | @@ -1,59 +0,0 @@ |
1 | -class ProjectMilestones < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - include SharedMarkdown | |
6 | - | |
7 | - Then 'I should see milestone "v2.2"' do | |
8 | - milestone = @project.milestones.find_by(title: "v2.2") | |
9 | - page.should have_content(milestone.title[0..10]) | |
10 | - page.should have_content(milestone.expires_at) | |
11 | - page.should have_content("Browse Issues") | |
12 | - end | |
13 | - | |
14 | - Given 'I click link "v2.2"' do | |
15 | - click_link "v2.2" | |
16 | - end | |
17 | - | |
18 | - Given 'I click link "New Milestone"' do | |
19 | - click_link "New Milestone" | |
20 | - end | |
21 | - | |
22 | - And 'I submit new milestone "v2.3"' do | |
23 | - fill_in "milestone_title", with: "v2.3" | |
24 | - click_button "Create milestone" | |
25 | - end | |
26 | - | |
27 | - Then 'I should see milestone "v2.3"' do | |
28 | - milestone = @project.milestones.find_by(title: "v2.3") | |
29 | - page.should have_content(milestone.title[0..10]) | |
30 | - page.should have_content(milestone.expires_at) | |
31 | - page.should have_content("Browse Issues") | |
32 | - end | |
33 | - | |
34 | - And 'project "Shop" has milestone "v2.2"' do | |
35 | - project = Project.find_by(name: "Shop") | |
36 | - milestone = create(:milestone, | |
37 | - title: "v2.2", | |
38 | - project: project, | |
39 | - description: "# Description header" | |
40 | - ) | |
41 | - 3.times { create(:issue, project: project, milestone: milestone) } | |
42 | - end | |
43 | - | |
44 | - Given 'the milestone has open and closed issues' do | |
45 | - project = Project.find_by(name: "Shop") | |
46 | - milestone = project.milestones.find_by(title: 'v2.2') | |
47 | - | |
48 | - # 3 Open issues created above; create one closed issue | |
49 | - create(:closed_issue, project: project, milestone: milestone) | |
50 | - end | |
51 | - | |
52 | - When 'I click link "All Issues"' do | |
53 | - click_link 'All Issues' | |
54 | - end | |
55 | - | |
56 | - Then "I should see 3 issues" do | |
57 | - page.should have_selector('#tab-issues li', count: 4) | |
58 | - end | |
59 | -end |
features/steps/project/project_multiselect_blob.rb
... | ... | @@ -1,58 +0,0 @@ |
1 | -class ProjectMultiselectBlob < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - class << self | |
7 | - def click_line_steps(*line_numbers) | |
8 | - line_numbers.each do |line_number| | |
9 | - step "I click line #{line_number} in file" do | |
10 | - find("#L#{line_number}").click | |
11 | - end | |
12 | - | |
13 | - step "I shift-click line #{line_number} in file" do | |
14 | - script = "$('#L#{line_number}').trigger($.Event('click', { shiftKey: true }));" | |
15 | - page.evaluate_script(script) | |
16 | - end | |
17 | - end | |
18 | - end | |
19 | - | |
20 | - def check_state_steps(*ranges) | |
21 | - ranges.each do |range| | |
22 | - fragment = range.kind_of?(Array) ? "L#{range.first}-#{range.last}" : "L#{range}" | |
23 | - pluralization = range.kind_of?(Array) ? "s" : "" | |
24 | - | |
25 | - step "I should see \"#{fragment}\" as URI fragment" do | |
26 | - URI.parse(current_url).fragment.should == fragment | |
27 | - end | |
28 | - | |
29 | - step "I should see line#{pluralization} #{fragment[1..-1]} highlighted" do | |
30 | - ids = Array(range).map { |n| "LC#{n}" } | |
31 | - extra = false | |
32 | - | |
33 | - highlighted = all("#tree-content-holder .highlight .line.hll") | |
34 | - highlighted.each do |element| | |
35 | - extra ||= ids.delete(element[:id]).nil? | |
36 | - end | |
37 | - | |
38 | - extra.should be_false and ids.should be_empty | |
39 | - end | |
40 | - end | |
41 | - end | |
42 | - end | |
43 | - | |
44 | - click_line_steps *Array(1..5) | |
45 | - check_state_steps *Array(1..5), Array(1..2), Array(1..3), Array(1..4), Array(1..5), Array(3..5) | |
46 | - | |
47 | - step 'I go back in history' do | |
48 | - page.evaluate_script("window.history.back()") | |
49 | - end | |
50 | - | |
51 | - step 'I go forward in history' do | |
52 | - page.evaluate_script("window.history.forward()") | |
53 | - end | |
54 | - | |
55 | - step 'I click on "Gemfile.lock" file in repo' do | |
56 | - click_link "Gemfile.lock" | |
57 | - end | |
58 | -end | |
59 | 0 | \ No newline at end of file |
features/steps/project/project_network_graph.rb
... | ... | @@ -1,93 +0,0 @@ |
1 | -class ProjectNetworkGraph < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedPaths | |
4 | - include SharedProject | |
5 | - | |
6 | - Then 'page should have network graph' do | |
7 | - page.should have_selector ".network-graph" | |
8 | - end | |
9 | - | |
10 | - When 'I visit project "Shop" network page' do | |
11 | - # Stub Graph max_size to speed up test (10 commits vs. 650) | |
12 | - Network::Graph.stub(max_count: 10) | |
13 | - | |
14 | - project = Project.find_by(name: "Shop") | |
15 | - visit project_network_path(project, "master") | |
16 | - end | |
17 | - | |
18 | - And 'page should select "master" in select box' do | |
19 | - page.should have_selector '.select2-chosen', text: "master" | |
20 | - end | |
21 | - | |
22 | - And 'page should select "v2.1.0" in select box' do | |
23 | - page.should have_selector '.select2-chosen', text: "v2.1.0" | |
24 | - end | |
25 | - | |
26 | - And 'page should have "master" on graph' do | |
27 | - within '.network-graph' do | |
28 | - page.should have_content 'master' | |
29 | - end | |
30 | - end | |
31 | - | |
32 | - When 'I switch ref to "stable"' do | |
33 | - page.select 'stable', from: 'ref' | |
34 | - sleep 2 | |
35 | - end | |
36 | - | |
37 | - When 'I switch ref to "v2.1.0"' do | |
38 | - page.select 'v2.1.0', from: 'ref' | |
39 | - sleep 2 | |
40 | - end | |
41 | - | |
42 | - When 'click "Show only selected branch" checkbox' do | |
43 | - find('#filter_ref').click | |
44 | - sleep 2 | |
45 | - end | |
46 | - | |
47 | - Then 'page should have content not containing "v2.1.0"' do | |
48 | - within '.network-graph' do | |
49 | - page.should have_content 'cleaning' | |
50 | - end | |
51 | - end | |
52 | - | |
53 | - Then 'page should not have content not containing "v2.1.0"' do | |
54 | - within '.network-graph' do | |
55 | - page.should_not have_content 'cleaning' | |
56 | - end | |
57 | - end | |
58 | - | |
59 | - And 'page should select "stable" in select box' do | |
60 | - page.should have_selector '.select2-chosen', text: "stable" | |
61 | - end | |
62 | - | |
63 | - And 'page should select "v2.1.0" in select box' do | |
64 | - page.should have_selector '.select2-chosen', text: "v2.1.0" | |
65 | - end | |
66 | - | |
67 | - And 'page should have "stable" on graph' do | |
68 | - within '.network-graph' do | |
69 | - page.should have_content 'stable' | |
70 | - end | |
71 | - end | |
72 | - | |
73 | - When 'I looking for a commit by SHA of "v2.1.0"' do | |
74 | - within ".network-form" do | |
75 | - fill_in 'extended_sha1', with: '98d6492' | |
76 | - find('button').click | |
77 | - end | |
78 | - sleep 2 | |
79 | - end | |
80 | - | |
81 | - And 'page should have "v2.1.0" on graph' do | |
82 | - within '.network-graph' do | |
83 | - page.should have_content 'v2.1.0' | |
84 | - end | |
85 | - end | |
86 | - | |
87 | - When 'I look for a commit by ";"' do | |
88 | - within ".network-form" do | |
89 | - fill_in 'extended_sha1', with: ';' | |
90 | - find('button').click | |
91 | - end | |
92 | - end | |
93 | -end |
features/steps/project/project_search_code.rb
... | ... | @@ -1,17 +0,0 @@ |
1 | -class ProjectSearchCode < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - When 'I search for term "Welcome to GitLab"' do | |
7 | - fill_in "search", with: "Welcome to GitLab" | |
8 | - click_button "Go" | |
9 | - click_link 'Repository Code' | |
10 | - end | |
11 | - | |
12 | - Then 'I should see files from repository containing "Welcome to GitLab"' do | |
13 | - page.should have_content "Welcome to GitLab" | |
14 | - page.should have_content "GitLab is a free project and repository management application" | |
15 | - end | |
16 | - | |
17 | -end |
features/steps/project/project_services.rb
... | ... | @@ -1,103 +0,0 @@ |
1 | -class ProjectServices < Spinach::FeatureSteps | |
2 | - include SharedAuthentication | |
3 | - include SharedProject | |
4 | - include SharedPaths | |
5 | - | |
6 | - step 'I visit project "Shop" services page' do | |
7 | - visit project_services_path(@project) | |
8 | - end | |
9 | - | |
10 | - step 'I should see list of available services' do | |
11 | - page.should have_content 'Project services' | |
12 | - page.should have_content 'Campfire' | |
13 | - page.should have_content 'Hipchat' | |
14 | - page.should have_content 'GitLab CI' | |
15 | - page.should have_content 'Assembla' | |
16 | - end | |
17 | - | |
18 | - step 'I click gitlab-ci service link' do | |
19 | - click_link 'GitLab CI' | |
20 | - end | |
21 | - | |
22 | - step 'I fill gitlab-ci settings' do | |
23 | - check 'Active' | |
24 | - fill_in 'Project url', with: 'http://ci.gitlab.org/projects/3' | |
25 | - fill_in 'Token', with: 'verySecret' | |
26 | - click_button 'Save' | |
27 | - end | |
28 | - | |
29 | - step 'I should see service settings saved' do | |
30 | - find_field('Project url').value.should == 'http://ci.gitlab.org/projects/3' | |
31 | - end | |
32 | - | |
33 | - step 'I click hipchat service link' do | |
34 | - click_link 'Hipchat' | |
35 | - end | |
36 | - | |
37 | - step 'I fill hipchat settings' do | |
38 | - check 'Active' | |
39 | - fill_in 'Room', with: 'gitlab' | |
40 | - fill_in 'Token', with: 'verySecret' | |
41 | - click_button 'Save' | |
42 | - end | |
43 | - | |
44 | - step 'I should see hipchat service settings saved' do | |
45 | - find_field('Room').value.should == 'gitlab' | |
46 | - end | |
47 | - | |
48 | - | |
49 | - step 'I click pivotaltracker service link' do | |
50 | - click_link 'PivotalTracker' | |
51 | - end | |
52 | - | |
53 | - step 'I fill pivotaltracker settings' do | |
54 | - check 'Active' | |
55 | - fill_in 'Token', with: 'verySecret' | |
56 | - click_button 'Save' | |
57 | - end | |
58 | - | |
59 | - step 'I should see pivotaltracker service settings saved' do | |
60 | - find_field('Token').value.should == 'verySecret' | |
61 | - end | |
62 | - | |
63 | - step 'I click Flowdock service link' do | |
64 | - click_link 'Flowdock' | |
65 | - end | |
66 | - | |
67 | - step 'I fill Flowdock settings' do | |
68 | - check 'Active' | |
69 | - fill_in 'Token', with: 'verySecret' | |
70 | - click_button 'Save' | |
71 | - end | |
72 | - | |
73 | - step 'I should see Flowdock service settings saved' do | |
74 | - find_field('Token').value.should == 'verySecret' | |
75 | - end | |
76 | - | |
77 | - step 'I click Assembla service link' do | |
78 | - click_link 'Assembla' | |
79 | - end | |
80 | - | |
81 | - step 'I fill Assembla settings' do | |
82 | - check 'Active' | |
83 | - fill_in 'Token', with: 'verySecret' | |
84 | - click_button 'Save' | |
85 | - end | |
86 | - | |
87 | - step 'I should see Assembla service settings saved' do | |
88 | - find_field('Token').value.should == 'verySecret' | |
89 | - end | |
90 | - | |
91 | - step 'I click email on push service link' do | |
92 | - click_link 'Emails on push' | |
93 | - end | |
94 | - | |
95 | - step 'I fill email on push settings' do | |
96 | - fill_in 'Recipients', with: 'qa@company.name' | |
97 | - click_button 'Save' | |
98 | - end | |
99 | - | |
100 | - step 'I should see email on push service settings saved' do | |
101 | - find_field('Recipients').value.should == 'qa@company.name' | |
102 | - end | |
103 | -end |