agilezen 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,71 @@
1
+ {
2
+ "page": 1,
3
+ "pageSize": 3,
4
+ "totalPages": 4,
5
+ "totalItems": 10,
6
+ "items": [
7
+ {
8
+ "id": 1,
9
+ "text": "User registration",
10
+ "size": "2",
11
+ "color": "grey",
12
+ "ready": false,
13
+ "blocked": false,
14
+ "phase": {
15
+ "id": 87567,
16
+ "name": "Development"
17
+ },
18
+ "phaseIndex": 0,
19
+ "creator": {
20
+ "id": 19059,
21
+ "name": "Adam"
22
+ },
23
+ "owner": {
24
+ "id": 19059,
25
+ "name": "Adam"
26
+ }
27
+ },
28
+ {
29
+ "id": 2,
30
+ "text": "User sign in",
31
+ "size": "2",
32
+ "color": "grey",
33
+ "ready": false,
34
+ "blocked": false,
35
+ "phase": {
36
+ "id": 87566,
37
+ "name": "Ready"
38
+ },
39
+ "phaseIndex": 0,
40
+ "creator": {
41
+ "id": 19059,
42
+ "name": "Adam"
43
+ },
44
+ "owner": {
45
+ "id": 19059,
46
+ "name": "Adam"
47
+ }
48
+ },
49
+ {
50
+ "id": 3,
51
+ "text": "Create a post",
52
+ "size": "3",
53
+ "color": "grey",
54
+ "ready": false,
55
+ "blocked": false,
56
+ "phase": {
57
+ "id": 87565,
58
+ "name": "Backlog"
59
+ },
60
+ "phaseIndex": 0,
61
+ "creator": {
62
+ "id": 19059,
63
+ "name": "Adam"
64
+ },
65
+ "owner": {
66
+ "id": 19059,
67
+ "name": "Adam"
68
+ }
69
+ }
70
+ ]
71
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "page": 2,
3
+ "pageSize": 3,
4
+ "totalPages": 4,
5
+ "totalItems": 10,
6
+ "items": [
7
+ {
8
+ "id": 4,
9
+ "text": "Add a post",
10
+ "size": "2",
11
+ "color": "grey",
12
+ "ready": false,
13
+ "blocked": false,
14
+ "phase": {
15
+ "id": 87565,
16
+ "name": "Backlog"
17
+ },
18
+ "phaseIndex": 1,
19
+ "creator": {
20
+ "id": 19059,
21
+ "name": "Adam"
22
+ },
23
+ "owner": {
24
+ "id": 19059,
25
+ "name": "Adam"
26
+ }
27
+ },
28
+ {
29
+ "id": 5,
30
+ "text": "Edit a post",
31
+ "size": "",
32
+ "color": "grey",
33
+ "ready": false,
34
+ "blocked": false,
35
+ "phase": {
36
+ "id": 87565,
37
+ "name": "Backlog"
38
+ },
39
+ "phaseIndex": 2,
40
+ "creator": {
41
+ "id": 19059,
42
+ "name": "Adam"
43
+ },
44
+ "owner": {
45
+ "id": 19059,
46
+ "name": "Adam"
47
+ }
48
+ },
49
+ {
50
+ "id": 6,
51
+ "text": "Delete a post",
52
+ "size": "",
53
+ "color": "grey",
54
+ "ready": false,
55
+ "blocked": false,
56
+ "phase": {
57
+ "id": 87565,
58
+ "name": "Backlog"
59
+ },
60
+ "phaseIndex": 3,
61
+ "creator": {
62
+ "id": 19059,
63
+ "name": "Adam"
64
+ },
65
+ "owner": {
66
+ "id": 19059,
67
+ "name": "Adam"
68
+ }
69
+ }
70
+ ]
71
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "page": 1,
3
+ "pageSize": 10,
4
+ "totalPages": 1,
5
+ "totalItems": 1,
6
+ "items": {
7
+ "story": [
8
+ {
9
+ "id": 1,
10
+ "text": "End world hunger",
11
+ "size": "large",
12
+ "color": "grey",
13
+ "ready": false,
14
+ "blocked": false,
15
+ "phase": {
16
+ "id": 1,
17
+ "name": "Backlog"
18
+ },
19
+ "phaseIndex": 0,
20
+ "creator": {
21
+ "id": 1,
22
+ "name": "John Doe"
23
+ },
24
+ "owner": {
25
+ "id": 2,
26
+ "name": "Jane Doe"
27
+ }
28
+ },
29
+ {
30
+ "id": 2,
31
+ "text": "Start world hunger",
32
+ "size": "large",
33
+ "color": "grey",
34
+ "ready": false,
35
+ "blocked": false,
36
+ "phase": {
37
+ "id": 1,
38
+ "name": "Backlog"
39
+ },
40
+ "phaseIndex": 0,
41
+ "creator": {
42
+ "id": 3,
43
+ "name": "Kill Bill"
44
+ },
45
+ "owner": {
46
+ "id": 4,
47
+ "name": "Dinjas"
48
+ }
49
+ }
50
+ ]
51
+ }
52
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "id": 321,
3
+ "text": "Feed the children",
4
+ "size": "large",
5
+ "color": "grey",
6
+ "ready": false,
7
+ "blocked": true,
8
+ "reasonBlocked": "Need new ideas",
9
+ "phase": {
10
+ "id": 1,
11
+ "name": "Backlog"
12
+ },
13
+ "phaseIndex": 0,
14
+ "creator": {
15
+ "id": 1,
16
+ "name": "John Doe"
17
+ },
18
+ "owner": {
19
+ "id": 2,
20
+ "name": "Jane Doe"
21
+ }
22
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "id": 2,
3
+ "text": "User sign in",
4
+ "details": "The user should be able to sign in with either email or username.",
5
+ "size": "2",
6
+ "color": "grey",
7
+ "ready": false,
8
+ "blocked": false,
9
+ "phase": {
10
+ "id": 87566,
11
+ "name": "Ready"
12
+ },
13
+ "phaseIndex": 0,
14
+ "creator": {
15
+ "id": 19059,
16
+ "name": "Adam"
17
+ },
18
+ "owner": {
19
+ "id": 19059,
20
+ "name": "Adam"
21
+ },
22
+ "tags": [
23
+ {
24
+ "id": 81499,
25
+ "name": "sign-in"
26
+ },
27
+ {
28
+ "id": 81500,
29
+ "name": "user"
30
+ },
31
+ {
32
+ "id": 81501,
33
+ "name": "authentication"
34
+ }
35
+ ],
36
+ "metrics": {
37
+ "createTime": "/Date(1289217335000-0600)/",
38
+ "startTime": "/Date(1295607873000-0600)/"
39
+ }
40
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "id": 2,
3
+ "text": "User sign in",
4
+ "size": "2",
5
+ "color": "grey",
6
+ "ready": false,
7
+ "blocked": false,
8
+ "phase": {
9
+ "id": 87566,
10
+ "name": "Ready"
11
+ },
12
+ "phaseIndex": 0,
13
+ "creator": {
14
+ "id": 19059,
15
+ "name": "Adam"
16
+ },
17
+ "owner": {
18
+ "id": 19059,
19
+ "name": "Adam"
20
+ },
21
+ "tags": [
22
+ {
23
+ "id": 81499,
24
+ "name": "sign-in"
25
+ },
26
+ {
27
+ "id": 81500,
28
+ "name": "user"
29
+ },
30
+ {
31
+ "id": 81501,
32
+ "name": "authentication"
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,66 @@
1
+ require "spec_helper"
2
+ require File.expand_path('../support/fakeweb_helper', __FILE__)
3
+
4
+ describe AgileZen::Projects do
5
+
6
+ before(:each) do
7
+ @client = AgileZen::Client.new(:api_key => 'testapikey')
8
+ end
9
+
10
+ describe "#projects" do
11
+ context "success" do
12
+ it "performs an API request for all projects" do
13
+ register_get('http://agilezen.com/api/v1/projects', 'projects.json')
14
+
15
+ response = @client.projects
16
+
17
+ response.projects.items.project.first.name.should eq('World Peace')
18
+ end
19
+
20
+ it "allows filtering" do
21
+ register_get('http://agilezen.com/api/v1/projects?where=name%3ADiff', 'projects-with-filtering.json')
22
+
23
+ response = @client.projects(:where => 'name:Diff')
24
+
25
+ response.items.first.name.should =~ /Diff/i
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "#project" do
31
+ context "success" do
32
+ it "performs an API request for a single project" do
33
+ register_get('http://agilezen.com/api/v1/project/123', 'project.json')
34
+
35
+ response = @client.project(123)
36
+
37
+ response.id.should eq(123)
38
+ response.name.should eq('Hippie Peace')
39
+ end
40
+
41
+ it "includes enrichments" do
42
+ register_get('http://agilezen.com/api/v1/project/15404?with=details%2Cphases%2Cmembers%2Croles%2Cinvites%2Cmetrics', 'project/15404-with-enrichments.json')
43
+
44
+ response = @client.project(15404, :with => 'details,phases,members,roles,invites,metrics')
45
+
46
+ response.details.should_not be_nil
47
+ response.phases.should_not be_nil
48
+ response.members.should_not be_nil
49
+ response.roles.should_not be_nil
50
+ response.invites.should_not be_nil
51
+ response.metrics.should_not be_nil
52
+ end
53
+ end
54
+
55
+ context "failure" do
56
+ it "returns nil to indicate failure" do
57
+ register_get('http://agilezen.com/api/v1/project/99999', 'garbage.txt')
58
+
59
+ response = @client.project(99999)
60
+
61
+ response.should be_nil
62
+ end
63
+ end
64
+ end
65
+
66
+ end
@@ -0,0 +1,11 @@
1
+ require "bundler"
2
+ Bundler.setup
3
+
4
+ require "rspec"
5
+ require 'fakeweb'
6
+ require "agilezen"
7
+ # require "support/matchers"
8
+ #
9
+ # Rspec.configure do |config|
10
+ # config.include AgileZen::Spec::Matchers
11
+ # end
@@ -0,0 +1,84 @@
1
+ require "spec_helper"
2
+ require File.expand_path('../support/fakeweb_helper', __FILE__)
3
+
4
+ describe AgileZen::Stories do
5
+
6
+ before(:each) do
7
+ @client = AgileZen::Client.new(:api_key => 'testapikey')
8
+ end
9
+
10
+ describe "#stories" do
11
+ context "success" do
12
+ it "performs an API request for all story of a given project" do
13
+ register_get('http://agilezen.com/api/v1/project/123/stories', 'stories.json')
14
+
15
+ response = @client.project_stories(123)
16
+
17
+ response.items.story.first.text.should eq('End world hunger')
18
+ end
19
+
20
+ it "pages stories" do
21
+ register_get('http://agilezen.com/api/v1/project/15404/stories?page=1&pageSize=3', 'stories-page1.json')
22
+ register_get('http://agilezen.com/api/v1/project/15404/stories?page=2&pageSize=3', 'stories-page2.json')
23
+
24
+ response1 = @client.project_stories(15404, :page => 1, :pageSize => 3)
25
+ response2 = @client.project_stories(15404, :page => 2, :pageSize => 3)
26
+
27
+ response1.items.should_not eql(response2.items)
28
+ end
29
+ end
30
+
31
+ context "failure" do
32
+ it "returns nil to indicate failure" do
33
+ register_get('http://agilezen.com/api/v1/project/99999/stories', 'garbage.txt')
34
+
35
+ response = @client.project_stories(99999)
36
+
37
+ response.should be_nil
38
+ end
39
+ end
40
+ end
41
+
42
+ describe "#story" do
43
+ context "success" do
44
+ it "performs an API request for a single story of a given project" do
45
+ register_get('http://agilezen.com/api/v1/project/123/story/321', 'story.json')
46
+
47
+ response = @client.project_story(123, 321)
48
+
49
+ response.id.should eq(321)
50
+ response.text.should eq('Feed the children')
51
+ end
52
+
53
+ it "includes enrichments" do
54
+ register_get('http://agilezen.com/api/v1/project/15404/story/2?with=details%2Ctags%2Cmetrics', 'story/2-with-enrichments.json')
55
+
56
+ response = @client.project_story(15404, 2, :with => 'details,tags,metrics')
57
+
58
+ response.details.should_not be_nil
59
+ response.tags.should_not be_nil
60
+ response.metrics.should_not be_nil
61
+ end
62
+
63
+ it "allows filtering" do
64
+ register_get('http://agilezen.com/api/v1/project/15404/story/2?where=tag%3Aauthentication&with=tags', 'story/2-with-filtering.json')
65
+
66
+ response = @client.project_story(15404, 2, :where => 'tag:authentication', :with => 'tags')
67
+
68
+ response.id.should == 2
69
+ response.tags.detect { |t| t.name == 'authentication' }.should_not be_nil
70
+ end
71
+ end
72
+
73
+ context "failure" do
74
+ it "returns nil to indicate failure" do
75
+ register_get('http://agilezen.com/api/v1/project/99999/story/11111', 'garbage.txt')
76
+
77
+ response = @client.project_story(99999, 11111)
78
+
79
+ response.should be_nil
80
+ end
81
+ end
82
+ end
83
+
84
+ end