nuker 0.0.47 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -0
  3. data/.ruby-version +1 -0
  4. data/.rvmrc +62 -0
  5. data/.rvmrc.08.13.2014-14:58:37 +1 -0
  6. data/.travis.yml +3 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE +165 -0
  9. data/Rakefile +5 -0
  10. data/bin/nuker +26 -0
  11. data/config.ru +2 -0
  12. data/example-features/generic/example-with-background.feature +11 -0
  13. data/example-features/generic/example-with-data-table.feature +7 -0
  14. data/example-features/generic/example-with-scenario-outline-examples.feature +11 -0
  15. data/example-features/generic/example_with_tags.feature +8 -0
  16. data/example-features/generic/has-lots-of-tags.feature +5 -0
  17. data/example-features/generic/multiple-scenarios.feature +7 -0
  18. data/example-features/too-many-wip-tags/too-many-wip-tags.feature +21 -0
  19. data/features/counts.feature +25 -0
  20. data/features/feature_page.feature +69 -0
  21. data/features/list_tags.feature +31 -0
  22. data/features/notifications.feature +9 -0
  23. data/features/progress_bar.feature +21 -0
  24. data/features/project_home.feature +25 -0
  25. data/features/projects.feature +19 -0
  26. data/features/push_features.feature +34 -0
  27. data/features/scenario_page.feature +84 -0
  28. data/features/search_features.feature +100 -0
  29. data/features/step_definitions/feature_page_steps.rb +15 -0
  30. data/features/step_definitions/notifications_steps.rb +11 -0
  31. data/features/step_definitions/project_home_steps.rb +10 -0
  32. data/features/step_definitions/projects_steps.rb +28 -0
  33. data/features/step_definitions/push_features_steps.rb +48 -0
  34. data/features/step_definitions/scenario_page_steps.rb +29 -0
  35. data/features/step_definitions/search_features_steps.rb +24 -0
  36. data/features/step_definitions/steps.rb +35 -0
  37. data/features/step_definitions/welcome_page.rb +19 -0
  38. data/features/support/env.rb +33 -0
  39. data/features/welcome_page.feature +30 -0
  40. data/lib/nuker/application.rb +161 -0
  41. data/lib/nuker/counts_tags.rb +27 -0
  42. data/lib/nuker/feature.rb +16 -0
  43. data/lib/nuker/parses_features.rb +30 -0
  44. data/lib/nuker/project.rb +8 -0
  45. data/lib/nuker/public/bootstrap.min.css +356 -0
  46. data/lib/nuker/public/nuker-logo.png +0 -0
  47. data/lib/nuker/public/scripts/projects.js +6 -0
  48. data/lib/nuker/public/skin.css +208 -0
  49. data/lib/nuker/public/wally-logo.png +0 -0
  50. data/lib/nuker/search_features.rb +47 -0
  51. data/lib/nuker/version.rb +3 -0
  52. data/lib/nuker/views/feature.haml +19 -0
  53. data/lib/nuker/views/feature_link.haml +6 -0
  54. data/lib/nuker/views/layout.haml +53 -0
  55. data/lib/nuker/views/progress.haml +15 -0
  56. data/lib/nuker/views/project.haml +0 -0
  57. data/lib/nuker/views/scenario.haml +31 -0
  58. data/lib/nuker/views/search.haml +36 -0
  59. data/lib/nuker/views/table.haml +10 -0
  60. data/lib/nuker/views/tag_links.haml +4 -0
  61. data/lib/nuker.rb +7 -0
  62. data/nuker.gemspec +37 -0
  63. data/spec/spec_helper.rb +35 -0
  64. metadata +88 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c9d7ff5ec9e1996f45598d644e6741cda9e55748
4
- data.tar.gz: 41fbd7c3764a04c6f0bad4434f1d31568a9bf2f6
3
+ metadata.gz: 37ddc86185abd564059a00887d9dcc182dce589f
4
+ data.tar.gz: 57e74e0f863b22e88f2c8a7f3f39a4713ca2b50a
5
5
  SHA512:
6
- metadata.gz: d1fb0bd6f6a2361a0971ace72e931a5840d2b0d770e1255639c78ec4bbfd52e1728e418dbcf28037b2ba78c2c4098b85f4c2250baa6ed6af985c5d4cb2bc5937
7
- data.tar.gz: 884889ec515d576948046e8c68e8869c1f884fb9e4d4d4c6e52d6693c40fffae3b8ac98fae6a904f8624958d6ec735f7fc08eb40c1e556dbb258e1aee2f06c14
6
+ metadata.gz: 836208fa7c992bb786f868cc026a9e962aae26fce8a20ffc6083f559ebd9c4d070f16262fe980cd0cb3f3f1ab36774ddc446f2cf9202803c3434a9bac608d4d8
7
+ data.tar.gz: a25d5aa3f191a94b248033fce15a987cc8b0d2487b341cefb90ce0905963d8293cd1ded0157b50845c6ab5661133ea899c1227d48ace9b760860c479c1183c35
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ *.swp
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
6
+ .nuker
7
+ chromedriver.log
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.0.0
data/.rvmrc ADDED
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 2.0.0" > .rvmrc
9
+ environment_id="ruby-2.0.0-p481@nuker"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.25.28 (stable)" # 1.10.1 seems like a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | __rvm_awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
17
+
18
+ # First we attempt to load the desired environment directly from the environment
19
+ # file. This is very fast and efficient compared to running through the entire
20
+ # CLI and selector. If you want feedback on which environment was used then
21
+ # insert the word 'use' after --create as this triggers verbose mode.
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
+ then
25
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
+ for __hook in "${rvm_path:-$HOME/.rvm}/hooks/after_use"*
27
+ do
28
+ if [[ -f "${__hook}" && -x "${__hook}" && -s "${__hook}" ]]
29
+ then \. "${__hook}" || true
30
+ fi
31
+ done
32
+ unset __hook
33
+ if (( ${rvm_use_flag:=1} >= 2 )) # display only when forced
34
+ then
35
+ if [[ $- == *i* ]] # check for interactive shells
36
+ then printf "%b" "Using: $(tput setaf 2 2>/dev/null)$GEM_HOME$(tput sgr0 2>/dev/null)
37
+ " # show the user the ruby and gemset they are using in green
38
+ else printf "%b" "Using: $GEM_HOME
39
+ " # don't use colors in non-interactive shells
40
+ fi
41
+ fi
42
+ else
43
+ # If the environment file has not yet been created, use the RVM CLI to select.
44
+ rvm --create "$environment_id" || {
45
+ echo "Failed to create RVM environment '${environment_id}'."
46
+ return 1
47
+ }
48
+ fi
49
+
50
+ # If you use bundler, this might be useful to you:
51
+ # if [[ -s Gemfile ]] && {
52
+ # ! builtin command -v bundle >/dev/null ||
53
+ # builtin command -v bundle | GREP_OPTIONS="" \grep $rvm_path/bin/bundle >/dev/null
54
+ # }
55
+ # then
56
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
57
+ # gem install bundler
58
+ # fi
59
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
60
+ # then
61
+ # bundle install | GREP_OPTIONS="" \grep -vE '^Using|Your bundle is complete'
62
+ # fi
@@ -0,0 +1 @@
1
+ rvm 2.0.0@nuker --create --rvmrc
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ rvm:
2
+ - 2.0.0
3
+ script: bundle exec rspec spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in nuker .gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,165 @@
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright 2011 British Broadcasting Corporation
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+
9
+ This version of the GNU Lesser General Public License incorporates
10
+ the terms and conditions of version 3 of the GNU General Public
11
+ License, supplemented by the additional permissions listed below.
12
+
13
+ 0. Additional Definitions.
14
+
15
+ As used herein, "this License" refers to version 3 of the GNU Lesser
16
+ General Public License, and the "GNU GPL" refers to version 3 of the GNU
17
+ General Public License.
18
+
19
+ "The Library" refers to a covered work governed by this License,
20
+ other than an Application or a Combined Work as defined below.
21
+
22
+ An "Application" is any work that makes use of an interface provided
23
+ by the Library, but which is not otherwise based on the Library.
24
+ Defining a subclass of a class defined by the Library is deemed a mode
25
+ of using an interface provided by the Library.
26
+
27
+ A "Combined Work" is a work produced by combining or linking an
28
+ Application with the Library. The particular version of the Library
29
+ with which the Combined Work was made is also called the "Linked
30
+ Version".
31
+
32
+ The "Minimal Corresponding Source" for a Combined Work means the
33
+ Corresponding Source for the Combined Work, excluding any source code
34
+ for portions of the Combined Work that, considered in isolation, are
35
+ based on the Application, and not on the Linked Version.
36
+
37
+ The "Corresponding Application Code" for a Combined Work means the
38
+ object code and/or source code for the Application, including any data
39
+ and utility programs needed for reproducing the Combined Work from the
40
+ Application, but excluding the System Libraries of the Combined Work.
41
+
42
+ 1. Exception to Section 3 of the GNU GPL.
43
+
44
+ You may convey a covered work under sections 3 and 4 of this License
45
+ without being bound by section 3 of the GNU GPL.
46
+
47
+ 2. Conveying Modified Versions.
48
+
49
+ If you modify a copy of the Library, and, in your modifications, a
50
+ facility refers to a function or data to be supplied by an Application
51
+ that uses the facility (other than as an argument passed when the
52
+ facility is invoked), then you may convey a copy of the modified
53
+ version:
54
+
55
+ a) under this License, provided that you make a good faith effort to
56
+ ensure that, in the event an Application does not supply the
57
+ function or data, the facility still operates, and performs
58
+ whatever part of its purpose remains meaningful, or
59
+
60
+ b) under the GNU GPL, with none of the additional permissions of
61
+ this License applicable to that copy.
62
+
63
+ 3. Object Code Incorporating Material from Library Header Files.
64
+
65
+ The object code form of an Application may incorporate material from
66
+ a header file that is part of the Library. You may convey such object
67
+ code under terms of your choice, provided that, if the incorporated
68
+ material is not limited to numerical parameters, data structure
69
+ layouts and accessors, or small macros, inline functions and templates
70
+ (ten or fewer lines in length), you do both of the following:
71
+
72
+ a) Give prominent notice with each copy of the object code that the
73
+ Library is used in it and that the Library and its use are
74
+ covered by this License.
75
+
76
+ b) Accompany the object code with a copy of the GNU GPL and this license
77
+ document.
78
+
79
+ 4. Combined Works.
80
+
81
+ You may convey a Combined Work under terms of your choice that,
82
+ taken together, effectively do not restrict modification of the
83
+ portions of the Library contained in the Combined Work and reverse
84
+ engineering for debugging such modifications, if you also do each of
85
+ the following:
86
+
87
+ a) Give prominent notice with each copy of the Combined Work that
88
+ the Library is used in it and that the Library and its use are
89
+ covered by this License.
90
+
91
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
92
+ document.
93
+
94
+ c) For a Combined Work that displays copyright notices during
95
+ execution, include the copyright notice for the Library among
96
+ these notices, as well as a reference directing the user to the
97
+ copies of the GNU GPL and this license document.
98
+
99
+ d) Do one of the following:
100
+
101
+ 0) Convey the Minimal Corresponding Source under the terms of this
102
+ License, and the Corresponding Application Code in a form
103
+ suitable for, and under terms that permit, the user to
104
+ recombine or relink the Application with a modified version of
105
+ the Linked Version to produce a modified Combined Work, in the
106
+ manner specified by section 6 of the GNU GPL for conveying
107
+ Corresponding Source.
108
+
109
+ 1) Use a suitable shared library mechanism for linking with the
110
+ Library. A suitable mechanism is one that (a) uses at run time
111
+ a copy of the Library already present on the user's computer
112
+ system, and (b) will operate properly with a modified version
113
+ of the Library that is interface-compatible with the Linked
114
+ Version.
115
+
116
+ e) Provide Installation Information, but only if you would otherwise
117
+ be required to provide such information under section 6 of the
118
+ GNU GPL, and only to the extent that such information is
119
+ necessary to install and execute a modified version of the
120
+ Combined Work produced by recombining or relinking the
121
+ Application with a modified version of the Linked Version. (If
122
+ you use option 4d0, the Installation Information must accompany
123
+ the Minimal Corresponding Source and Corresponding Application
124
+ Code. If you use option 4d1, you must provide the Installation
125
+ Information in the manner specified by section 6 of the GNU GPL
126
+ for conveying Corresponding Source.)
127
+
128
+ 5. Combined Libraries.
129
+
130
+ You may place library facilities that are a work based on the
131
+ Library side by side in a single library together with other library
132
+ facilities that are not Applications and are not covered by this
133
+ License, and convey such a combined library under terms of your
134
+ choice, if you do both of the following:
135
+
136
+ a) Accompany the combined library with a copy of the same work based
137
+ on the Library, uncombined with any other library facilities,
138
+ conveyed under the terms of this License.
139
+
140
+ b) Give prominent notice with the combined library that part of it
141
+ is a work based on the Library, and explaining where to find the
142
+ accompanying uncombined form of the same work.
143
+
144
+ 6. Revised Versions of the GNU Lesser General Public License.
145
+
146
+ The Free Software Foundation may publish revised and/or new versions
147
+ of the GNU Lesser General Public License from time to time. Such new
148
+ versions will be similar in spirit to the present version, but may
149
+ differ in detail to address new problems or concerns.
150
+
151
+ Each version is given a distinguishing version number. If the
152
+ Library as you received it specifies that a certain numbered version
153
+ of the GNU Lesser General Public License "or any later version"
154
+ applies to it, you have the option of following the terms and
155
+ conditions either of that published version or of any later version
156
+ published by the Free Software Foundation. If the Library as you
157
+ received it does not specify a version number of the GNU Lesser
158
+ General Public License, you may choose any version of the GNU Lesser
159
+ General Public License ever published by the Free Software Foundation.
160
+
161
+ If the Library as you received it specifies that a proxy can decide
162
+ whether future versions of the GNU Lesser General Public License shall
163
+ apply, that proxy's public statement of acceptance of any version is
164
+ permanent authorization for you to choose that version for the
165
+ Library.
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ task :sample do
4
+ sh "bin/nuker push http://localhost:4567/projects/project1 features/"
5
+ end
data/bin/nuker ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
3
+
4
+ if ARGV.first == "server"
5
+ require "nuker"
6
+ Sinatra::Application.run!
7
+ elsif ARGV[0] == "push"
8
+ require "restclient"
9
+ require "json"
10
+ require "nuker/parses_features"
11
+ features = []
12
+ Dir.glob(File.join("#{ARGV[2]}", "**/*.feature")).each do |feature_path|
13
+ begin
14
+ gherkin = nuker::ParsesFeatures.new.parse(File.read(feature_path))
15
+ rescue
16
+ puts "Couldn't parse '#{feature_path}'"
17
+ puts "Contents:"
18
+ puts File.read(feature_path)
19
+ end
20
+ features << {:path => feature_path, :gherkin => gherkin}
21
+ end
22
+ RestClient.put "#{ARGV[1]}/features/?authentication_code=#{File.read(".nuker").strip}", features.to_json, {:content_type => :json, :accept => :json}
23
+ elsif ARGV[0] == "destroy"
24
+ require "restclient"
25
+ RestClient.delete "#{ARGV[1]}?authentication_code=#{File.read(".nuker").strip}"
26
+ end
data/config.ru ADDED
@@ -0,0 +1,2 @@
1
+ require './lib/nuker'
2
+ run Sinatra::Application
@@ -0,0 +1,11 @@
1
+ Feature: Feature with a background
2
+
3
+ Background:
4
+ Given I do some stuff
5
+ And I do some other stuff
6
+ Then I'm not really sure
7
+
8
+ Scenario: Scenario1
9
+ Given I do this
10
+ And I do that
11
+ Then I'm still not sure
@@ -0,0 +1,7 @@
1
+ Feature: Data Table
2
+
3
+ Scenario: Data Table
4
+ Given a data table:
5
+ | a | b | c |
6
+ | 1 | 2 | 3 |
7
+ | 4 | 5 | 6 |
@@ -0,0 +1,11 @@
1
+ Feature: Scenario Outline
2
+
3
+ Scenario Outline: Outline with examples
4
+ Given there are <start> cucumbers
5
+ When I eat <eat> cucumbers
6
+ Then I should have <left> cucumbers
7
+
8
+ Examples:
9
+ | start | eat | left |
10
+ | 12 | 5 | 7 |
11
+ | 20 | 5 | 15 |
@@ -0,0 +1,8 @@
1
+ Feature: Example with tags
2
+ In order to
3
+ As a bla
4
+ I want bla
5
+
6
+ @wip
7
+ Scenario: Do some stuff
8
+ Given I do some stuff
@@ -0,0 +1,5 @@
1
+ @batman @robin
2
+ Feature: Has lots of tags
3
+
4
+ @green_lantern @spider_man
5
+ Scenario: Also has some tags
@@ -0,0 +1,7 @@
1
+ Feature: Multiple Scenarios
2
+ Scenario: Scenario 1
3
+ Scenario: Scenario 2
4
+ Scenario: Scenario 3
5
+ Scenario: Scenario 4
6
+ Scenario: Scenario 5
7
+ Scenario: Scenario 6
@@ -0,0 +1,21 @@
1
+ Feature: Too many @wip tags
2
+ @wip
3
+ Scenario: Scenario 1
4
+ @wip
5
+ Scenario: Scenario 2
6
+ @wip
7
+ Scenario: Scenario 3
8
+ @wip
9
+ Scenario: Scenario 4
10
+ @wip
11
+ Scenario: Scenario 5
12
+ @wip
13
+ Scenario: Scenario 6
14
+ @wip
15
+ Scenario: Scenario 7
16
+ @wip
17
+ Scenario: Scenario 8
18
+ @wip
19
+ Scenario: Scenario 9
20
+ @wip
21
+ Scenario: Scenario 10
@@ -0,0 +1,25 @@
1
+ Feature: Counts
2
+ In order to understand the size of the project
3
+ As a stakeholder
4
+ I want a visual indication of the number of tags, scenarios and features
5
+
6
+ Background:
7
+ Given a feature file named "sample.feature" with the contents:
8
+ """
9
+ @tag1
10
+ Feature: Tag Feature
11
+
12
+ @tag2 @multiple
13
+ Scenario: Tag Foo 1
14
+
15
+ @tag3 @multiple
16
+ Scenario: Tag Bar 2
17
+ """
18
+
19
+ Scenario: Features
20
+ When I visit the project page
21
+ Then I see "Features (1)"
22
+
23
+ Scenario: Tags
24
+ When I visit the project page
25
+ Then I see "Tags (5)"
@@ -0,0 +1,69 @@
1
+ Feature: Feature Page
2
+ In order to view a feature and its intent
3
+ As a stakeholder
4
+ I want a page that displays the feature's name, free-form narrative and scenario titles
5
+
6
+ Scenario: Content
7
+ Given a feature file named "sample.feature" with the contents:
8
+ """
9
+ Feature: Sample Feature
10
+ In order to get some value
11
+ As a person
12
+ I want to create value
13
+ """
14
+ When I visit the sample feature page
15
+ Then I see the feature free-form narrative
16
+
17
+ Scenario: Tags
18
+ Given a feature file named "sample.feature" with the contents:
19
+ """
20
+ @sample_tag
21
+ Feature: Sample Feature
22
+ """
23
+ When I visit the sample feature page
24
+ Then I see "sample_tag"
25
+
26
+ Scenario: Scenario Links
27
+ Given a feature file named "sample.feature" with the contents:
28
+ """
29
+ Feature: Sample Feature
30
+ In order to get some value
31
+ As a person
32
+ I want to create value
33
+
34
+ Scenario: Sample Aidy
35
+ Given my name is "Aidy"
36
+ When I drink alcohol
37
+ Then I go nuts
38
+
39
+ Scenario: Sample Andrew
40
+ Given my name is 'Andrew'
41
+ When I drink alcohol
42
+ Then I go happy
43
+ """
44
+ When I visit the sample feature page
45
+ Then I see Scenario headers as links
46
+
47
+ Scenario: Sort Scenario Links in Alphabetical Order
48
+ Given a feature file named "sample.feature" with the contents:
49
+ """
50
+ Feature: Sample Feature
51
+ Scenario: V
52
+ Scenario: C
53
+ Scenario: I
54
+ Scenario: N
55
+ """
56
+ When I visit the sample feature page
57
+ Then the scenario links are sorted
58
+
59
+ Scenario: Scenario Tags
60
+ Given a feature file named "sample.feature" with the contents:
61
+ """
62
+ Feature: Sample Feature
63
+
64
+ @tag1 @tag2
65
+ Scenario: Sample Aidy
66
+ """
67
+ When I visit the sample feature page
68
+ Then I see "tag1"
69
+ And I see "tag2"
@@ -0,0 +1,31 @@
1
+ Feature: List Tags
2
+ In order to be informed of all tags
3
+ As a stakeholder
4
+ I want a list of tags to be displayed
5
+
6
+ Scenario: Multiple tags
7
+ Given a feature file named "sample.feature" with the contents:
8
+ """
9
+ @tag1
10
+ Feature: Tag Feature
11
+ @tag2 @multiple
12
+ Scenario: Tag Scenario 1
13
+ @tag3 @multiple
14
+ Scenario: Tag Scenario 2
15
+ """
16
+ When I visit the project page
17
+ Then I see a link to "@tag1 (1)" with the url "/projects/project/search?q=@tag1"
18
+ And I see a link to "@tag2 (1)" with the url "/projects/project/search?q=@tag2"
19
+ And I see a link to "@tag3 (1)" with the url "/projects/project/search?q=@tag3"
20
+ And I see a link to "@multiple (2)" with the url "/projects/project/search?q=@multiple"
21
+
22
+ Scenario: Coloured tags
23
+ Given a feature file named "sample.feature" with the contents:
24
+ """
25
+ @tag1
26
+ Feature: Tag Feature
27
+ @tag2 @tag3
28
+ Scenario: Tag Scenario 1
29
+ """
30
+ When I visit the project page
31
+ Then I see each tag has an individual colour
@@ -0,0 +1,9 @@
1
+ Feature: Notifications
2
+ In order to be great developers
3
+ As a developer
4
+ I want to be told off when I have too many bad tags
5
+
6
+ Scenario: Ten @wip tags
7
+ Given a feature file with 10 @wip tags
8
+ When I visit the project page
9
+ Then I see a notification that says "You have 10 @wip tags :("
@@ -0,0 +1,21 @@
1
+ Feature: Progress Bar
2
+ In order to see the state of the project
3
+ As a stakeholder
4
+ I want a visual representation of counted tags
5
+
6
+ Scenario: Progress Bar
7
+ Given a feature file on the project "project_name" with the contents:
8
+ """
9
+ Feature: Mixed
10
+
11
+ @wip
12
+ Scenario: WiP
13
+
14
+ @notstarted
15
+ Scenario: Not Started
16
+ """
17
+ When I visit the project page for "project_name"
18
+ And I select "Progress"
19
+ Then I see "This project has 2 scenarios"
20
+ And I see "@wip (50%)"
21
+ And I see "@notstarted (50%)"
@@ -0,0 +1,25 @@
1
+ Feature: Project Home Page
2
+ In order to simply view a project's complete story set
3
+ As a stakeholder
4
+ I want a home page that displays all features
5
+
6
+ Scenario: Links to features in alphabetical order
7
+ Given a feature file named "kate_moss.feature" with the contents:
8
+ """
9
+ Feature: Kate Moss
10
+ """
11
+ Given a feature file named "katie_price.feature" with the contents:
12
+ """
13
+ Feature: Katie Price
14
+ """
15
+ Given a feature file named "jessica_jane_clement.feature" with the contents:
16
+ """
17
+ Feature: Jessica-Jane Clement
18
+ """
19
+ Given a feature file named "elle_macpherson.feature" with the contents:
20
+ """
21
+ Feature: Elle Macpherson
22
+ """
23
+ When I visit the project page
24
+ Then I see a link to my sample features
25
+ And the features are ordered alphabetically
@@ -0,0 +1,19 @@
1
+ Feature: Projects
2
+ In order to allow multiple projects
3
+ As a user
4
+ I want to be able to switch between projects
5
+
6
+ Scenario: Single project
7
+ Given a feature file on the project "project_name" with the contents:
8
+ """
9
+ Feature: Projects
10
+ """
11
+ And I visit the project page for "project_name"
12
+ Then I see a link to the feature "Projects"
13
+
14
+ @javascript
15
+ Scenario: Switch between projects
16
+ Given 2 projects exist
17
+ When I view the welcome page
18
+ Then I can switch to the 2nd project
19
+ And I can switch to the 1st project
@@ -0,0 +1,34 @@
1
+ Feature: Push Features To Server
2
+ In order to easily get features on the server
3
+ As a developer
4
+ I want to be able to push features to an endpoint
5
+
6
+ Scenario: Push features without authentication
7
+ Given I don't have a .nuker authorisation file
8
+ When I put data to /my_project_name/features with the authentication code
9
+ Then I get a 403 http status
10
+
11
+ Scenario: Push features with authentication
12
+ Given I have a .nuker authentication file
13
+ When I put data to /my_project_name/features with the authentication code
14
+ Then I get a 201 http status
15
+
16
+ Scenario: Pushed features show up on home page
17
+ Given I have a .nuker authentication file
18
+ When I put data to /my_project_name/features with the authentication code
19
+ And I visit "my_project_name" page
20
+ Then I see the uploaded feature
21
+
22
+ Scenario: Delete projects without authorisation
23
+ Given I don't have a .nuker authorisation file
24
+ And I create a project called "project1"
25
+ When I send DELETE to "/projects/project1"
26
+ Then "project1" should exist
27
+ And I get a 403 http status
28
+
29
+ Scenario: Delete projects with authorisation
30
+ Given I have a .wally authentication file
31
+ And I create a project called "project1"
32
+ When I send DELETE to "/projects/project1"
33
+ Then "project1" should not exist
34
+ And I get a 201 http status