nephophobia 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/lib/nephophobia.rb +1 -0
  2. data/lib/nephophobia/client.rb +8 -0
  3. data/lib/nephophobia/compute.rb +11 -15
  4. data/lib/nephophobia/credential.rb +80 -0
  5. data/lib/nephophobia/image.rb +6 -7
  6. data/lib/nephophobia/project.rb +3 -3
  7. data/lib/nephophobia/user.rb +0 -17
  8. data/lib/nephophobia/version.rb +1 -1
  9. data/test/cassettes/compute_all.yml +58 -4
  10. data/test/cassettes/compute_all_with_filter.yml +57 -3
  11. data/test/cassettes/compute_create.yml +31 -4
  12. data/test/cassettes/compute_create_with_optional_params.yml +31 -4
  13. data/test/cassettes/compute_destroy.yml +59 -3
  14. data/test/cassettes/compute_find.yml +81 -0
  15. data/test/cassettes/compute_reboot.yml +57 -3
  16. data/test/cassettes/credential_all.yml +98 -0
  17. data/test/cassettes/credential_all_without_keys.yml +28 -0
  18. data/test/cassettes/credential_create.yml +71 -0
  19. data/test/cassettes/credential_destroy.yml +71 -0
  20. data/test/cassettes/image_all.yml +4 -4
  21. data/test/cassettes/image_all_with_filter.yml +27 -0
  22. data/test/cassettes/image_find.yml +31 -4
  23. data/test/cassettes/project_add_member.yml +84 -3
  24. data/test/cassettes/project_all.yml +4 -114
  25. data/test/cassettes/project_all_with_user_name.yml +190 -0
  26. data/test/cassettes/project_create.yml +85 -4
  27. data/test/cassettes/project_destroy.yml +84 -3
  28. data/test/cassettes/project_find.yml +4 -4
  29. data/test/cassettes/project_find_with_invalid_project_name.yml +3 -3
  30. data/test/cassettes/project_member.yml +136 -0
  31. data/test/cassettes/project_members.yml +58 -4
  32. data/test/cassettes/project_members_with_invalid_project_name.yml +3 -3
  33. data/test/cassettes/project_remove_member.yml +84 -3
  34. data/test/cassettes/role_all.yml +112 -4
  35. data/test/cassettes/role_all_with_project_name.yml +111 -3
  36. data/test/cassettes/role_all_without_roles.yml +109 -0
  37. data/test/cassettes/role_create.yml +84 -3
  38. data/test/cassettes/role_create_with_project_name.yml +84 -3
  39. data/test/cassettes/role_create_with_project_name_and_role_name.yml +84 -3
  40. data/test/cassettes/role_destroy.yml +84 -3
  41. data/test/cassettes/role_destroy_with_project_name.yml +60 -6
  42. data/test/cassettes/role_destroy_with_project_name_and_role_name.yml +60 -6
  43. data/test/cassettes/user_create.yml +31 -4
  44. data/test/cassettes/user_destroy.yml +30 -3
  45. data/test/cassettes/user_find.yml +58 -4
  46. data/test/cassettes/user_find_with_invalid_user_name.yml +3 -3
  47. data/test/cassettes/user_register.yml +67 -13
  48. data/test/cassettes/{user_register_assert.yml → user_register_asserts.yml} +10 -10
  49. data/test/lib/hashify_test.rb +3 -3
  50. data/test/lib/nephophobia/compute_test.rb +85 -69
  51. data/test/lib/nephophobia/credential_test.rb +91 -0
  52. data/test/lib/nephophobia/image_test.rb +29 -29
  53. data/test/lib/nephophobia/project_test.rb +115 -51
  54. data/test/lib/nephophobia/role_test.rb +151 -42
  55. data/test/lib/nephophobia/user_test.rb +48 -28
  56. data/test/test_helper.rb +9 -8
  57. metadata +21 -22
  58. data/test/cassettes/compute_all_with_string_into_int_error.yml +0 -28
  59. data/test/cassettes/image_all_with_string_into_int_error.yml +0 -28
  60. data/test/cassettes/project_all_with_string_into_int_error.yml +0 -55
  61. data/test/cassettes/project_all_with_with_user_name.yml +0 -136
  62. data/test/cassettes/project_members_with_no_members.yml +0 -28
  63. data/test/cassettes/project_members_with_string_into_int_error.yml +0 -28
  64. data/test/cassettes/role_all_with_no_roles.yml +0 -28
  65. data/test/cassettes/role_all_with_string_into_int_error.yml +0 -28
  66. data/test/cassettes/user_credentials.yml +0 -30
@@ -5,11 +5,11 @@ describe Hashify do
5
5
 
6
6
  describe "::convert" do
7
7
  it "creates a hash from a Nokogiri::XML::Document" do
8
- xml = cassette_for "compute_all"
8
+ xml = cassette_for "compute_all", 1
9
9
  hash = Hashify.convert xml.root
10
10
 
11
- assert_equal "Server 1189", hash['DescribeInstancesResponse']['reservationSet']['item'].first['instancesSet']['item']['displayName']
12
- assert_equal "testserver1", hash['DescribeInstancesResponse']['reservationSet']['item'].last['instancesSet']['item']['displayName']
11
+ assert_equal "Server 42", hash['DescribeInstancesResponse']['reservationSet']['item'].first['instancesSet']['item'].first['displayName']
12
+ assert_equal "Server 46", hash['DescribeInstancesResponse']['reservationSet']['item'].first['instancesSet']['item'].last['displayName']
13
13
  end
14
14
  end
15
15
  end
@@ -1,20 +1,48 @@
1
1
  require "test_helper"
2
2
 
3
3
  describe Nephophobia::Compute do
4
+ ##
5
+ # Note:
6
+ # Assumes there is always at least one valid project.
7
+ # Projects are core functionality to nova networking.
8
+ # We will always have at least one project configured.
9
+
4
10
  before do
5
- @compute = ::Client.with(:user,
6
- :access_key => "9dd4add8-ca15-42fd-8874-9a3d294ba459",
7
- :secret_key => "857c0bb3-b048-449e-b152-2f6cec97a164",
8
- :project => "vcr_project"
9
- ).compute
11
+ @project_name = "sandbox"
12
+ @image_id = "ami-00000002"
13
+ @compute = ::Client.with(:user).compute
10
14
  end
11
15
 
12
16
  describe "#all" do
13
- it "returns all instances" do
17
+ before do
14
18
  VCR.use_cassette "compute_all" do
15
- response = @compute.all
19
+ @instance_id = @compute.create(@image_id).instance_id
16
20
 
17
- response.size.must_equal 2
21
+ @response = @compute.all
22
+ end
23
+ end
24
+
25
+ after do
26
+ VCR.use_cassette "compute_all" do
27
+ @compute.destroy @instance_id
28
+ end
29
+ end
30
+
31
+ it "returns all instances" do
32
+ @response.size.must_be :>=, 1
33
+ end
34
+ end
35
+
36
+ describe "#all with filter" do
37
+ before do
38
+ VCR.use_cassette "compute_all_with_filter" do
39
+ @instance_id = @compute.create(@image_id).instance_id
40
+ end
41
+ end
42
+
43
+ after do
44
+ VCR.use_cassette "compute_all_with_filter" do
45
+ @compute.destroy @instance_id
18
46
  end
19
47
  end
20
48
 
@@ -28,22 +56,15 @@ describe Nephophobia::Compute do
28
56
  lambda { @compute.all filter }.must_raise Hugs::Errors::BadRequest
29
57
  end
30
58
  end
31
-
32
- it "has a 'TypeError: can't convert String into Integer' error" do
33
- VCR.use_cassette "compute_all_with_string_into_int_error" do
34
- response = @compute.all
35
-
36
- response.size.must_equal 1
37
- end
38
- end
39
59
  end
40
60
 
41
61
  describe "#create" do
42
- before { @image_id = "ami-usc3oydl" }
43
-
44
62
  it "create an instance with given 'image_id'" do
45
63
  VCR.use_cassette "compute_create" do
46
- response = @compute.create @image_id
64
+ response = @compute.create @image_id
65
+ instance_id = response.instance_id
66
+
67
+ @compute.destroy instance_id
47
68
 
48
69
  response.image_id.must_equal @image_id
49
70
  end
@@ -56,7 +77,10 @@ describe Nephophobia::Compute do
56
77
  }
57
78
 
58
79
  VCR.use_cassette "compute_create_with_optional_params" do
59
- response = @compute.create @image_id, params
80
+ response = @compute.create @image_id, params
81
+ instance_id = response.instance_id
82
+
83
+ @compute.destroy instance_id
60
84
 
61
85
  response.name.must_equal "testserver1"
62
86
  response.description.must_equal "test description"
@@ -65,80 +89,72 @@ describe Nephophobia::Compute do
65
89
  end
66
90
 
67
91
  describe "#destroy" do
68
- before { @instance_id = "i-000004a5" }
69
-
70
- it "destroy the given 'instance_id'" do
92
+ before do
71
93
  VCR.use_cassette "compute_destroy" do
72
- response = @compute.destroy @instance_id
94
+ instance_id = @compute.create(@image_id).instance_id
73
95
 
74
- response.return.must_equal true
96
+ @response = @compute.destroy instance_id
75
97
  end
76
98
  end
99
+
100
+ it "destroy the given 'instance_id'" do
101
+ @response.return.must_equal true
102
+ end
77
103
  end
78
104
 
79
105
  describe "#find" do
80
106
  before do
81
- @instance_id = "i-000004a5"
82
-
83
107
  VCR.use_cassette "compute_find" do
108
+ @instance_id = @compute.create(@image_id).instance_id
109
+
84
110
  @response = @compute.find @instance_id
85
111
  end
86
112
  end
87
113
 
114
+ after do
115
+ VCR.use_cassette "compute_find" do
116
+ @compute.destroy @instance_id
117
+ end
118
+ end
119
+
88
120
  it "returns the given 'instance_id'" do
89
121
  @response.instance_id.must_equal @instance_id
90
122
  end
91
123
 
92
124
  it "contains the compute data" do
93
- compute = @response
94
-
95
- compute.project_id.must_equal "vcr_project"
96
- compute.description.must_be_nil
97
- compute.name.must_equal "Server 1189"
98
- #compute.key_name.must_equal "None (production, e3ab3)" fix
99
- compute.instance_id.must_equal "i-000004a5"
100
- compute.state.must_equal "networking" # fix
101
- compute.public_dns_name.must_be_nil
102
- compute.private_dns_name.must_be_nil # fix
103
- compute.image_id.must_equal "ami-usc3oydl"
104
- compute.dns_name.must_be_nil # fix
105
- compute.launch_time.must_equal DateTime.parse("2011-03-15 07:05:27")
106
- compute.placement.must_equal "nova"
107
- compute.instance_type.must_equal "m1.small"
125
+ @response.project_id.must_equal @project_name
126
+ @response.description.must_be_nil
127
+ @response.name.must_match %r{Server [0-9]+}
128
+ @response.respond_to?(:key_name).must_equal true
129
+ @response.instance_id.must_match %r{i-[a-z0-9]+}
130
+ @response.state.must_match %r{[a-z]+}
131
+ @response.respond_to?(:dns_name).must_equal true
132
+ @response.respond_to?(:public_dns_name).must_equal true
133
+ @response.respond_to?(:private_dns_name).must_equal true
134
+ @response.image_id.must_match %r{ami-[a-z0-9]+}
135
+ @response.launch_time.must_be_kind_of DateTime
136
+ @response.placement.must_match %r{[a-z]+}
137
+ @response.instance_type.must_match %r{[a-z]{2}.[a-z]+}
108
138
  end
109
139
  end
110
140
 
111
141
  describe "#reboot" do
112
- before { @instance_id = "i-000004a5" }
113
-
114
- it "reboots the given 'instance_id'" do
142
+ before do
115
143
  VCR.use_cassette "compute_reboot" do
116
- response = @compute.reboot @instance_id
144
+ @instance_id = @compute.create(@image_id).instance_id
117
145
 
118
- response.return.must_equal true
146
+ @response = @compute.reboot @instance_id
147
+ end
148
+ end
149
+
150
+ after do
151
+ VCR.use_cassette "compute_reboot" do
152
+ @compute.destroy @instance_id
119
153
  end
120
154
  end
121
- end
122
155
 
123
- #describe "#start" do
124
- # before { @instance_id = "i-000004a5" }
125
-
126
- # 2011-02-26 22:24:55,809 ERROR nova.api [HU844ZYTDM1-8QJIY6MI jdewey production] Unexpected error raised: Unsupported API request: controller = CloudController, action = StartInstances
127
- # it "API doesn't implement StartInstances" do
128
- # VCR.use_cassette "compute_start" do
129
- # lambda { @compute.start @instance_id }.must_raise Hugs::Errors::BadRequest
130
- # end
131
- # end
132
- #end
133
-
134
- #describe "#stop" do
135
- # before { @instance_id = "i-000004a5" }
136
-
137
- # 2011-02-26 20:50:45,375 ERROR nova.api [HIA363E2X4025I-FIZ7E jdewey production] Unexpected error raised: Unsupported API request: controller = CloudController, action = StopInstances
138
- # it "API doesn't implement StopInstances" do
139
- # VCR.use_cassette "compute_stop" do
140
- # lambda { @compute.stop @instance_id }.must_raise Hugs::Errors::BadRequest
141
- # end
142
- # end
143
- #end
156
+ it "reboots the given 'instance_id'" do
157
+ @response.return.must_equal true
158
+ end
159
+ end
144
160
  end
@@ -0,0 +1,91 @@
1
+ describe Nephophobia::Credential do
2
+ ##
3
+ # Note:
4
+ # Assumes there is always at least one valid project.
5
+ # Projects are core functionality to nova networking.
6
+ # We will always have at least one project configured.
7
+
8
+ before do
9
+ @key_name = "vcr_keypair"
10
+ @project_name = "sandbox"
11
+ @credential = ::Client.with(:user).credential
12
+ end
13
+
14
+ describe "#all" do
15
+ describe "with keys" do
16
+ before do
17
+ VCR.use_cassette "credential_all" do
18
+ @credential.create @key_name
19
+
20
+ @response = @credential.all
21
+ end
22
+ end
23
+
24
+ after do
25
+ VCR.use_cassette "credential_all" do
26
+ @credential.destroy @key_name
27
+ end
28
+ end
29
+
30
+ it "returns all keys" do
31
+ @response.size.must_be :>=, 1
32
+ end
33
+ end
34
+
35
+ describe "without keys" do
36
+ it "returns all keys" do
37
+ VCR.use_cassette "credential_all_without_keys" do
38
+ response = @credential.all
39
+
40
+ response.must_be_nil
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "#create" do
47
+ before do
48
+ VCR.use_cassette "credential_create" do
49
+ @response = @credential.create @key_name
50
+ end
51
+ end
52
+
53
+ after do
54
+ VCR.use_cassette "credential_create" do
55
+ @credential.destroy @key_name
56
+ end
57
+ end
58
+
59
+ it "creates a key pair for the key name" do
60
+ @response.material.must_match %r{BEGIN RSA PRIVATE KEY.*END RSA PRIVATE KEY}m
61
+ end
62
+ end
63
+
64
+ describe "#destroy" do
65
+ before do
66
+ VCR.use_cassette "credential_destroy" do
67
+ @credential.create @key_name
68
+
69
+ @response = @credential.destroy @key_name
70
+ end
71
+ end
72
+
73
+ it "deletes the key pair for the key name" do
74
+ @response.return.must_equal true
75
+ end
76
+ end
77
+
78
+ #describe "#download" do
79
+ # before do
80
+ # @user_name = "jd265j"
81
+ # end
82
+
83
+ # it "returns the credentials for a given 'user_name' for the specified 'project_name'." do
84
+ # VCR.use_cassette "credential_download" do
85
+ # response = @credential.download @user_name, @project_name
86
+
87
+ # response.must_match %r{BEGIN CERTIFICATE}
88
+ # end
89
+ # end
90
+ #end
91
+ end
@@ -1,12 +1,18 @@
1
1
  require "test_helper"
2
2
 
3
3
  describe Nephophobia::Image do
4
+ ##
5
+ # Note:
6
+ # Assumes there is always at least one valid image.
7
+ # Images need to be manually uploaded with euca2ools
8
+ # or ogle.
9
+ #
10
+ # Assumes there is always at least one valid project.
11
+ # Projects are core functionality to nova networking.
12
+ # We will always have at least one project configured.
13
+
4
14
  before do
5
- @image = ::Client.with(:user,
6
- :access_key => "57c971e9-0225-4fa4-8969-60b880e9f827",
7
- :secret_key => "86a6a123-2d11-4e99-9931-20b01f6fb236",
8
- :project => "vcr_project"
9
- ).image
15
+ @image = ::Client.with(:user).image
10
16
  end
11
17
 
12
18
  describe "#all" do
@@ -14,7 +20,7 @@ describe Nephophobia::Image do
14
20
  VCR.use_cassette "image_all" do
15
21
  response = @image.all
16
22
 
17
- response.size.must_equal 10
23
+ response.size.must_be :>=, 1
18
24
  end
19
25
  end
20
26
 
@@ -22,52 +28,46 @@ describe Nephophobia::Image do
22
28
  VCR.use_cassette "image_all_with_filter" do
23
29
  response = @image.all "ExecutableBy.1" => "self"
24
30
 
25
- response.size.must_equal 10
26
- end
27
- end
28
-
29
- it "has a 'TypeError: can't convert String into Integer' error" do
30
- VCR.use_cassette "image_all_with_string_into_int_error" do
31
- response = @image.all
32
-
33
- response.size.must_equal 1
31
+ response.size.must_be :>=, 1
34
32
  end
35
33
  end
36
34
  end
37
35
 
38
36
  describe "#find" do
37
+ ##
38
+ # Note:
39
+ # Assumes this is a public, runnable, machine type.
40
+
39
41
  before do
40
- @image_id = "ami-d0f0o14c"
42
+ @image_id = "ami-00000002"
41
43
 
42
44
  VCR.use_cassette "image_find" do
43
45
  @response = @image.find @image_id
44
46
  end
45
47
  end
46
48
 
47
- it "returns the given 'image_id'" do
49
+ it "returns the image" do
48
50
  @response.image_id.must_equal @image_id
49
51
  end
50
52
 
51
53
  it "contains the image data" do
52
- image = @response
53
-
54
- image.architecture.must_equal "x86_64"
55
- image.image_id.must_equal @image_id
56
- image.image_location.must_equal "ttylinx-bucket/ttylinux-uec-amd64-12.1_2.6.35-22_1-vmlinuz.manifest.xml"
57
- image.image_owner_id.must_equal "production"
58
- image.image_type.must_equal "kernel"
59
- image.is_public.must_equal "false"
60
- image.kernel_id.must_equal "true"
61
- image.state.must_equal "available"
54
+ @response.respond_to?(:architecture).must_equal true
55
+ @response.image_id.must_equal @image_id
56
+ @response.image_location.must_match %r{[a-z]+}
57
+ @response.respond_to?(:image_owner_id).must_equal true
58
+ @response.image_type.must_equal "machine"
59
+ @response.is_public.must_equal "true"
60
+ @response.kernel_id.must_match %r{[a-z]+-[0-9]+}
61
+ @response.state.must_equal "available"
62
62
  end
63
63
  end
64
64
 
65
65
  describe "#public" do
66
66
  it "returns all public images" do
67
67
  VCR.use_cassette "image_all" do
68
- response = @image.public
68
+ response = @image.runnable
69
69
 
70
- response.size.must_equal 1
70
+ response.any? { |i| i.image_type != "kernel"}.must_equal true
71
71
  end
72
72
  end
73
73
  end
@@ -1,23 +1,38 @@
1
1
  require "test_helper"
2
2
 
3
3
  describe Nephophobia::Project do
4
+ ##
5
+ # Note:
6
+ # Assumes there is always at least one valid project.
7
+ # Projects are core functionality to nova networking.
8
+ # We will always have at least one project configured.
9
+
4
10
  before do
11
+ @user_name = "vcr_user"
12
+ @project_name = "sandbox"
5
13
  @project = ::Client.with(:admin).project
6
14
  @user = ::Client.with(:admin).user
7
- @user_name = "vcr"
8
- @project_name = "vcr_project"
9
15
  end
10
16
 
11
17
  describe "#add_member" do
12
- before { @project_name = "vcr_secondary_project" }
13
-
14
- it "adds the given 'user_name' to the specified 'project_name'" do
18
+ before do
15
19
  VCR.use_cassette "project_add_member" do
16
- response = @project.add_member @user_name, @project_name
20
+ @user.create @user_name
17
21
 
18
- response.return.must_equal true
22
+ @response = @project.add_member @user_name, @project_name
23
+ end
24
+ end
25
+
26
+ after do
27
+ VCR.use_cassette "project_add_member" do
28
+ @project.remove_member @user_name, @project_name
29
+ @user.destroy @user_name
19
30
  end
20
31
  end
32
+
33
+ it "adds the given user name to the project" do
34
+ @response.return.must_equal true
35
+ end
21
36
  end
22
37
 
23
38
  describe "#all" do
@@ -25,48 +40,76 @@ describe Nephophobia::Project do
25
40
  VCR.use_cassette "project_all" do
26
41
  response = @project.all
27
42
 
28
- response.size.must_equal 5
43
+ response.size.must_be :>=, 1
29
44
  end
30
45
  end
46
+ end
31
47
 
32
- it "has a 'TypeError: can't convert String into Integer' error" do
33
- VCR.use_cassette "project_all_with_string_into_int_error" do
34
- response = @project.all
48
+ describe "#all with a 'user_name'" do
49
+ before do
50
+ VCR.use_cassette "project_all_with_user_name" do
51
+ @user.create @user_name
52
+ @project.add_member @user_name, @project_name
35
53
 
36
- response.size.must_equal 1
54
+ @response = @project.all @user_name
37
55
  end
38
56
  end
39
- end
40
-
41
- describe "#all with a user_name" do
42
- it "returns all projects for the given 'user_name'" do
43
- VCR.use_cassette "project_all_with_with_user_name" do
44
- response = @project.all @user_name
45
57
 
46
- response.size.must_equal 1
58
+ after do
59
+ VCR.use_cassette "project_all_with_user_name" do
60
+ @project.remove_member @user_name, @project_name
61
+ @user.destroy @user_name
47
62
  end
48
63
  end
64
+
65
+ it "returns all projects" do
66
+ @response.size.must_be :>=, 1
67
+ end
49
68
  end
50
69
 
51
70
  describe "#create" do
52
- it "creates the given 'user_name' in the specified 'project_name'" do
71
+ before do
53
72
  VCR.use_cassette "project_create" do
54
- response = @project.create @project_name, @user_name
73
+ @project_name = "vcr_project"
74
+ @user.create @user_name
55
75
 
56
- response.name.must_equal @project_name
57
- response.manager_id.must_equal @user_name
76
+ @response = @project.create @project_name, @user_name
58
77
  end
59
78
  end
79
+
80
+ after do
81
+ VCR.use_cassette "project_create" do
82
+ @user.destroy @user_name
83
+ @project.destroy @project_name
84
+ end
85
+ end
86
+
87
+ it "creates the project and adds the user name as the manager" do
88
+ @response.name.must_equal @project_name
89
+ @response.manager_id.must_equal @user_name
90
+ end
60
91
  end
61
92
 
62
93
  describe "#destroy" do
63
- it "destroys the given 'project_name'" do
94
+ before do
64
95
  VCR.use_cassette "project_destroy" do
65
- response = @project.destroy @project_name
96
+ @project_name = "vcr_project"
97
+ @user.create @user_name
98
+ @project.create @project_name, @user_name
99
+
100
+ @response = @project.destroy @project_name
101
+ end
102
+ end
66
103
 
67
- response.return.must_equal true
104
+ after do
105
+ VCR.use_cassette "project_destroy" do
106
+ @user.destroy @user_name
68
107
  end
69
108
  end
109
+
110
+ it "destroys the project" do
111
+ @response.return.must_equal true
112
+ end
70
113
  end
71
114
 
72
115
  describe "#find" do
@@ -76,21 +119,19 @@ describe Nephophobia::Project do
76
119
  end
77
120
  end
78
121
 
79
- it "returns the given 'project_name'" do
122
+ it "returns the project" do
80
123
  @response.name.must_equal @project_name
81
124
  end
82
125
 
83
126
  it "contains the project data" do
84
- project = @response
85
-
86
- project.name.must_equal "vcr_project"
87
- project.manager_id.must_equal "vcr"
88
- project.description.must_equal "vcr_project"
127
+ @response.name.must_equal @project_name
128
+ @response.manager_id.must_match %r{[a-z]+}
129
+ @response.description.must_equal @project_name
89
130
  end
90
131
  end
91
132
 
92
133
  describe "#find with invalid project_name" do
93
- it "rescues Hugs::Errors::BadRequest" do
134
+ it "returns nil" do
94
135
  VCR.use_cassette "project_find_with_invalid_project_name" do
95
136
  @response = @project.find "invalid_project_name"
96
137
  end
@@ -100,25 +141,27 @@ describe Nephophobia::Project do
100
141
  end
101
142
 
102
143
  describe "#members" do
103
- it "returns all project members for the given 'project_name'" do
144
+ before do
104
145
  VCR.use_cassette "project_members" do
105
- response = @project.members @project_name
146
+ @user.create @user_name
106
147
 
107
- response.size.must_equal 2
148
+ @response = @project.members @project_name
108
149
  end
109
150
  end
110
151
 
111
- it "has a 'TypeError: can't convert String into Integer' error" do
112
- VCR.use_cassette "project_members_with_string_into_int_error" do
113
- response = @project.members @project_name
114
-
115
- response.size.must_equal 1
152
+ after do
153
+ VCR.use_cassette "project_members" do
154
+ @user.destroy @user_name
116
155
  end
117
156
  end
157
+
158
+ it "returns all project members for the project" do
159
+ @response.size.must_be :>=, 1
160
+ end
118
161
  end
119
162
 
120
163
  describe "#members with invalid 'project_name'" do
121
- it "rescues Hugs::Errors::BadRequest" do
164
+ it "returns nil" do
122
165
  VCR.use_cassette "project_members_with_invalid_project_name" do
123
166
  @response = @project.members "invalid_project_name"
124
167
  end
@@ -128,24 +171,45 @@ describe Nephophobia::Project do
128
171
  end
129
172
 
130
173
  describe "#member?" do
131
- it "returns true if the given 'user_name' is a member of the specified 'project_name'" do
132
- VCR.use_cassette "project_members" do
133
- response = @project.member? @user_name, @project_name
174
+ before do
175
+ VCR.use_cassette "project_member" do
176
+ @user.create @user_name
177
+ @project.add_member @user_name, @project_name
134
178
 
135
- response.must_equal true
179
+ @response = @project.member? @user_name, @project_name
136
180
  end
137
181
  end
182
+
183
+ after do
184
+ VCR.use_cassette "project_member" do
185
+ @project.remove_member @user_name, @project_name
186
+ @user.destroy @user_name
187
+ end
188
+ end
189
+
190
+ it "returns true if the user name is a member of the project" do
191
+ @response.must_equal true
192
+ end
138
193
  end
139
194
 
140
195
  describe "#remove_member" do
141
- before { @project_name = "vcr_secondary_project" }
142
-
143
- it "removes the given 'user_name' from the specified 'project_name'" do
196
+ before do
144
197
  VCR.use_cassette "project_remove_member" do
145
- response = @project.remove_member @user_name, @project_name
198
+ @user.create @user_name
199
+ @project.add_member @user_name, @project_name
146
200
 
147
- response.return.must_equal true
201
+ @response = @project.remove_member @user_name, @project_name
148
202
  end
149
203
  end
204
+
205
+ after do
206
+ VCR.use_cassette "project_remove_member" do
207
+ @user.destroy @user_name
208
+ end
209
+ end
210
+
211
+ it "removes the user name from the specified project" do
212
+ @response.return.must_equal true
213
+ end
150
214
  end
151
215
  end