Commit 170340e6b15f91e79cf683c892ec887c3115b317

Authored by Ciro Santillli
1 parent e868de68

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.

features/project/archived.feature 0 → 100644
@@ -0,0 +1,39 @@ @@ -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,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"  
features/project/commits/comments.feature 0 → 100644
@@ -0,0 +1,48 @@ @@ -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,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,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,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 \ No newline at end of file 0 \ No newline at end of file
features/project/commits/diff_comments.feature 0 → 100644
@@ -0,0 +1,85 @@ @@ -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
features/project/commits/user_lookup.feature 0 → 100644
@@ -0,0 +1,14 @@ @@ -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 \ No newline at end of file 15 \ No newline at end of file
features/project/create.feature 0 → 100644
@@ -0,0 +1,22 @@ @@ -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 \ No newline at end of file 23 \ No newline at end of file
features/project/create_project.feature
@@ -1,22 +0,0 @@ @@ -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 \ No newline at end of file 0 \ No newline at end of file
features/project/fork.feature 0 → 100644
@@ -0,0 +1,14 @@ @@ -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,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.feature 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +Feature: Public Projects
  2 + Background:
  3 + Given I sign in as a user
  4 +
  5 + Scenario: I should see the list of public projects
  6 + When I visit the public projects area
  7 + Then I should see the list of public projects
  8 +
features/project/public_projects.feature
@@ -1,8 +0,0 @@ @@ -1,8 +0,0 @@
1 -Feature: Public Projects  
2 - Background:  
3 - Given I sign in as a user  
4 -  
5 - Scenario: I should see the list of public projects  
6 - When I visit the public projects area  
7 - Then I should see the list of public projects  
8 -  
features/public/projects.feature 0 → 100644
@@ -0,0 +1,101 @@ @@ -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,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  
features/snippets/discover.feature 0 → 100644
@@ -0,0 +1,10 @@ @@ -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,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  
features/snippets/user.feature 0 → 100644
@@ -0,0 +1,22 @@ @@ -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,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  
features/steps/admin/active_tab.rb 0 → 100644
@@ -0,0 +1,37 @@ @@ -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,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,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,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,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,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,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  
features/steps/admin/broadcast_messages.rb 0 → 100644
@@ -0,0 +1,41 @@ @@ -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
features/steps/admin/groups.rb 0 → 100644
@@ -0,0 +1,66 @@ @@ -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
features/steps/admin/logs.rb 0 → 100644
@@ -0,0 +1,11 @@ @@ -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
features/steps/admin/projects.rb 0 → 100644
@@ -0,0 +1,22 @@ @@ -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
features/steps/admin/users.rb 0 → 100644
@@ -0,0 +1,34 @@ @@ -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
features/steps/dashboard/active_tab.rb 0 → 100644
@@ -0,0 +1,21 @@ @@ -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,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,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,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,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,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,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,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  
features/steps/dashboard/event_filters.rb 0 → 100644
@@ -0,0 +1,87 @@ @@ -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 +
features/steps/dashboard/issues.rb 0 → 100644
@@ -0,0 +1,74 @@ @@ -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
features/steps/dashboard/merge_requests.rb 0 → 100644
@@ -0,0 +1,74 @@ @@ -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
features/steps/dashboard/projects.rb 0 → 100644
@@ -0,0 +1,11 @@ @@ -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
features/steps/dashboard/search.rb 0 → 100644
@@ -0,0 +1,19 @@ @@ -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
features/steps/dashboard/with_archived_projects.rb 0 → 100644
@@ -0,0 +1,22 @@ @@ -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
features/steps/profile/active_tab.rb 0 → 100644
@@ -0,0 +1,25 @@ @@ -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
features/steps/profile/emails.rb 0 → 100644
@@ -0,0 +1,48 @@ @@ -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
features/steps/profile/notifications.rb 0 → 100644
@@ -0,0 +1,12 @@ @@ -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,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,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,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,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  
features/steps/profile/ssh_keys.rb 0 → 100644
@@ -0,0 +1,48 @@ @@ -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
features/steps/project/active_tab.rb 0 → 100644
@@ -0,0 +1,140 @@ @@ -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
features/steps/project/archived.rb 0 → 100644
@@ -0,0 +1,37 @@ @@ -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 \ No newline at end of file 38 \ No newline at end of file
features/steps/project/browse_branches.rb 0 → 100644
@@ -0,0 +1,35 @@ @@ -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
features/steps/project/browse_commits.rb 0 → 100644
@@ -0,0 +1,104 @@ @@ -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
features/steps/project/browse_commits_user_lookup.rb 0 → 100644
@@ -0,0 +1,35 @@ @@ -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
features/steps/project/browse_files.rb 0 → 100644
@@ -0,0 +1,53 @@ @@ -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
features/steps/project/browse_git_repo.rb 0 → 100644
@@ -0,0 +1,19 @@ @@ -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
features/steps/project/browse_tags.rb 0 → 100644
@@ -0,0 +1,10 @@ @@ -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
features/steps/project/create.rb 0 → 100644
@@ -0,0 +1,42 @@ @@ -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,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  
features/steps/project/filter_labels.rb 0 → 100644
@@ -0,0 +1,70 @@ @@ -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
features/steps/project/fork.rb 0 → 100644
@@ -0,0 +1,36 @@ @@ -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
features/steps/project/forked_merge_requests.rb 0 → 100644
@@ -0,0 +1,183 @@ @@ -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
features/steps/project/graph.rb 0 → 100644
@@ -0,0 +1,13 @@ @@ -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
features/steps/project/hooks.rb 0 → 100644
@@ -0,0 +1,38 @@ @@ -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
features/steps/project/issue_tracker.rb 0 → 100644
@@ -0,0 +1,31 @@ @@ -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
features/steps/project/issues.rb 0 → 100644
@@ -0,0 +1,145 @@ @@ -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
features/steps/project/labels.rb 0 → 100644
@@ -0,0 +1,24 @@ @@ -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
features/steps/project/markdown_render.rb 0 → 100644
@@ -0,0 +1,207 @@ @@ -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
features/steps/project/merge_requests.rb 0 → 100644
@@ -0,0 +1,195 @@ @@ -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
features/steps/project/milestones.rb 0 → 100644
@@ -0,0 +1,59 @@ @@ -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
features/steps/project/multiselect_blob.rb 0 → 100644
@@ -0,0 +1,58 @@ @@ -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 \ No newline at end of file 59 \ No newline at end of file
features/steps/project/network_graph.rb 0 → 100644
@@ -0,0 +1,93 @@ @@ -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,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,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 \ No newline at end of file 0 \ No newline at end of file
features/steps/project/project_browse_branches.rb
@@ -1,35 +0,0 @@ @@ -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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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 \ No newline at end of file 0 \ No newline at end of file
features/steps/project/project_network_graph.rb
@@ -1,93 +0,0 @@ @@ -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,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,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