spec/issue_spec.rb in jiralicious-0.4.3 vs spec/issue_spec.rb in jiralicious-0.5.0

- old
+ new

@@ -1,385 +1,385 @@ -# encoding: utf-8 -require "spec_helper" - -describe Jiralicious::Issue, "finding" do - - before :each do - Jiralicious.configure do |config| - config.username = "jstewart" - config.password = "topsecret" - config.uri = "http://jstewart:topsecret@localhost" - config.auth_type = :basic - config.api_version = "latest" - end - - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1", - :status => "200", - :body => issue_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/comment/", - :status => "200", - :body => comment_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/watchers/", - :status => "200", - :body => watchers_json) - end - - it "finds the issue by key" do - Jiralicious::Issue.find("EX-1").should be_instance_of(Jiralicious::Issue) - issue = Jiralicious::Issue.find("EX-1") - end - - it "raises an exception when the issue can't be found or can't be viewed" do - lambda { - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1", - :body => '{"errorMessages": ["error"]}', - :status => ["404" "Not Found"]) - Jiralicious::Issue.find("EX-1") - }.should raise_error(Jiralicious::IssueNotFound) - end - - it "translates the JSON properly" do - issue = Jiralicious::Issue.find("EX-1") - issue.jira_key.should == "EX-1" - issue.jira_self.should == "http://example.com:8080/jira/rest/api/2.0/issue/EX-1" - end -end - -################################################################################################################# - -describe Jiralicious::Issue, "Managing Issues" do - - before :each do - Jiralicious.configure do |config| - config.username = "jstewart" - config.password = "topsecret" - config.uri = "http://jstewart:topsecret@localhost" - config.auth_type = :basic - config.api_version = "latest" - end - - FakeWeb.register_uri(:post, - "#{Jiralicious.rest_path}/issue/", - :status => "200", - :body => issue_create_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1", - :status => "200", - :body => issue_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/comment/", - :status => "200", - :body => comment_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/watchers/", - :status => "200", - :body => watchers_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-2", - :status => "200", - :body => issue_2_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-2/comment/", - :status => "200", - :body => '{"startAt": 0,"maxResults": 0,"total": 0,"comments": []}') - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-2/watchers/", - :status => "200", - :body => '{"self": "http://www.example.com/jira/rest/api/2/issue/EX-1/watchers","isWatching": false,"watchCount": 1,"watchers": [{"self": "http://www.example.com/jira/rest/api/2/user?username=fred","name": "fred","avatarUrls": {"16x16": "http://www.example.com/jira/secure/useravatar?size=small&ownerId=fred","48x48": "http://www.example.com/jira/secure/useravatar?size=large&ownerId=fred"},"displayName": "Fred F. User","active": false}]}') - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-3", - :status => "200", - :body => issue_3_json) - FakeWeb.register_uri(:put, - "#{Jiralicious.rest_path}/issue/EX-3", - :status => "200", - :body => issue_update_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-3/comment/", - :status => "200", - :body => '{"startAt": 0,"maxResults": 0,"total": 0,"comments": []}') - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-3/watchers/", - :status => "200", - :body => '{"self": "http://www.example.com/jira/rest/api/2/issue/EX-1/watchers","isWatching": false,"watchCount": 1,"watchers": [{"self": "http://www.example.com/jira/rest/api/2/user?username=fred","name": "fred","avatarUrls": {"16x16": "http://www.example.com/jira/secure/useravatar?size=small&ownerId=fred","48x48": "http://www.example.com/jira/secure/useravatar?size=large&ownerId=fred"},"displayName": "Fred F. User","active": false}]}') - end - - it "loads a hash in to the issue without subfields" do - issue = Jiralicious::Issue.new - issue.load(JSON.parse(issue_json), false) - issue.jira_key.should == 'EX-1' - issue.comments.count.should == 0 - issue.watchers.count.should == 0 - end - - it "loads a hash in to the issue with subfields" do - issue = Jiralicious::Issue.new - issue.load(JSON.parse(issue_json)) - issue.jira_key.should == 'EX-1' - issue.comments.comments.count.should == 1 - issue.watchers.watchers.count.should == 1 - end - - it "creates a new issue through fields" do - issue = Jiralicious::Issue.new - issue.fields.set_id("project", "10000") - issue.fields.set("summary", "this is a test of creating a scratch ticket") - issue.fields.set_id("issuetype", "7") - issue.fields.set_name("assignee", "stanley.handschuh") - issue.fields.set_id("priority", "1") - issue.fields.set("labels", ["new_label_p"]) - issue.fields.set("environment", "example of environment") - issue.fields.set("description", "example of the description extending") - issue.save! - issue.jira_key.should == 'EX-2' - issue.comments.comments.count.should == 0 - issue.watchers.watchers.count.should == 1 - end - - it "creates a new issue thgrough load with reload" do - hash = {"fields" => {"project" => {"id" => "10000"}, - "summary" => "this is a test of creating a scratch ticket", - "issuetype" => {"id" => "7"}, - "assignee" => {"name" => "stanley.handschuh"}, - "priority" => {"id" => "1"}, - "labels" => ["new_label_p"], - "environment" => "example of environment", - "description" => "example of the description extending" - }} - issue = Jiralicious::Issue.new - issue.load(hash, true) - issue.save! - issue.jira_key.should == 'EX-2' - issue.comments.comments.count.should == 0 - issue.watchers.watchers.count.should == 1 - end - - it "creates a new issue thgrough load without reload" do - hash = {"fields" => {"project" => {"id" => "10000"}, - "summary" => "this is a test of creating a scratch ticket", - "issuetype" => {"id" => "7"}, - "assignee" => {"name" => "stanley.handschuh"}, - "priority" => {"id" => "1"}, - "labels" => ["new_label_p"], - "environment" => "example of environment", - "description" => "example of the description extending" - }} - issue = Jiralicious::Issue.new - issue.load(hash) - issue.save! - issue.jira_key.should == 'EX-2' - issue.comments.comments.count.should == 0 - issue.watchers.watchers.count.should == 1 - end - - it "creates a new issue through new" do - hash = {"project" => {"id" => "10000"}, - "summary" => "this is a test of creating a scratch ticket", - "issuetype" => {"id" => "7"}, - "assignee" => {"name" => "stanley.handschuh"}, - "priority" => {"id" => "1"}, - "labels" => ["new_label_p"], - "environment" => "example of environment", - "description" => "example of the description extending" - } - issue = Jiralicious::Issue.new(hash) - issue.save! - issue.jira_key.should == 'EX-2' - issue.comments.comments.count.should == 0 - issue.watchers.watchers.count.should == 1 - end - - it "updates a new issue" do - issue = Jiralicious::Issue.find("EX-3") - issue.fields.append_a("labels", ["test_label"]) - issue.fields.append_s("description", " updated description ") - issue.save - issue.jira_key.should == 'EX-3' - issue['fields']['labels'].should == ["test_label"] - issue['fields']['description'].should == "example bug report updated description " - end -end - -################################################################################################################# - -describe Jiralicious::Issue, "Managing Issues" do - - before :each do - Jiralicious.configure do |config| - config.username = "jstewart" - config.password = "topsecret" - config.uri = "http://jstewart:topsecret@localhost" - config.auth_type = :basic - config.api_version = "latest" - end - - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1", - :status => "200", - :body => issue_json) - FakeWeb.register_uri(:delete, - "#{Jiralicious.rest_path}/issue/EX-1", - :status => "204") - FakeWeb.register_uri(:put, - "#{Jiralicious.rest_path}/issue/EX-1/assignee", - :status => "204") - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/comment/", - :status => "200", - :body => comment_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/watchers/", - :status => "200", - :body => watchers_json) - end - - it "update the assignee instance" do - issue = Jiralicious::Issue.find("EX-1") - response = issue.set_assignee("jira_admin") - response.response.class.should == Net::HTTPNoContent - end - - it "update the assignee class" do - response = Jiralicious::Issue.assignee("jira_admin", "EX-1") - response.response.class.should == Net::HTTPNoContent - end - - it "deletes the issue at the class level" do - response = Jiralicious::Issue.remove("EX-1") - response.response.class.should == Net::HTTPNoContent - end - - it "deletes the issue at the instance level" do - issue = Jiralicious::Issue.find("EX-1") - response = issue.remove - response.response.class.should == Net::HTTPNoContent - end -end - -################################################################################################################# - -describe Jiralicious::Issue, "Issue Information and Field Class" do - - before :each do - Jiralicious.configure do |config| - config.username = "jstewart" - config.password = "topsecret" - config.uri = "http://jstewart:topsecret@localhost" - config.auth_type = :basic - config.api_version = "latest" - end - - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/createmeta?projectKeys=EX&expand=projects.issuetypes.fields.&issuetypeIds=", - :status => "200", - :body => issue_createmeta_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/editmeta", - :status => "200", - :body => issue_editmeta_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1", - :status => "200", - :body => issue_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/comment/", - :status => "200", - :body => comment_json) - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/watchers/", - :status => "200", - :body => watchers_json) - end - - it "retrieve createmeta for project class level" do - meta = Jiralicious::Issue.createmeta("EX") - meta.class.should == Jiralicious::Field - meta.projects[0].key.should == "EX" - end - - it "retrieve createmeta for project instance level" do - issue = Jiralicious::Issue.find("EX-1") - meta = issue.createmeta - meta.class.should == Jiralicious::Field - meta.projects[0].key.should == "EX" - end - - it "retrieve editmeta for project class level" do - meta = Jiralicious::Issue.editmeta("EX-1") - meta.class.should == Jiralicious::Field - meta.key.should == "EX-1" - meta.fields.summary.required.should == false - end - - it "retrieve editmeta for project instance level" do - issue = Jiralicious::Issue.find("EX-1") - meta = issue.editmeta - meta.class.should == Jiralicious::Field - meta.key.should == "EX-1" - meta.jira_key.should == "EX-1" - meta.fields.summary.required.should == false - end - -end - -################################################################################################################# - -describe Jiralicious::Issue, "transitions" do - - before :each do - Jiralicious.configure do |config| - config.username = "jstewart" - config.password = "topsecret" - config.uri = "http://jstewart:topsecret@localhost" - config.auth_type = :basic - config.api_version = "latest" - end - - end - - it "returns list of possible transitions" do - FakeWeb.register_uri(:get, - "#{Jiralicious.rest_path}/issue/EX-1/transitions", - :status => "200", - :body => transitions_json) - - transitions = Jiralicious::Issue.get_transitions("#{Jiralicious.rest_path}/issue/EX-1/transitions") - transitions.should be_instance_of(Hash) - end - - it "performs transition" do - FakeWeb.register_uri(:post, - "#{Jiralicious.rest_path}/issue/EX-1/transitions", - :status => "204", - :body => nil) - - result = Jiralicious::Issue.transition("#{Jiralicious.rest_path}/issue/EX-1/transitions", - {"transition" => "3", "fields" => []}) - result.should be_nil - end - - it "raises an exception on transition failure" do - FakeWeb.register_uri(:post, - "#{Jiralicious.rest_path}/issue/EX-1/transitions", - :status => "400", - :body => %q{{"errorMessages":["Workflow operation is not valid"],"errors":{}}}) - lambda { - result = Jiralicious::Issue.transition("#{Jiralicious.rest_path}/issue/EX-1/transitions", - {"transition" => "invalid"}) - }.should raise_error(Jiralicious::TransitionError) - end - - it "raises an IssueNotFound exception if issue is not found" do - FakeWeb.register_uri(:post, - "#{Jiralicious.rest_path}/issue/EX-1/transitions", - :status => "404", - :body => %q{{"errorMessages":["Issue Does Not Exist"],"errors":{}}}) - lambda { - result = Jiralicious::Issue.transition("#{Jiralicious.rest_path}/issue/EX-1/transitions", - {"transition" => "invalid"}) - }.should raise_error(Jiralicious::IssueNotFound) - end -end +# encoding: utf-8 +require "spec_helper" + +describe Jiralicious::Issue, "finding" do + + before :each do + Jiralicious.configure do |config| + config.username = "jstewart" + config.password = "topsecret" + config.uri = "http://jstewart:topsecret@localhost" + config.auth_type = :basic + config.api_version = "latest" + end + + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1", + :status => "200", + :body => issue_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/comment/", + :status => "200", + :body => comment_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/watchers/", + :status => "200", + :body => watchers_json) + end + + it "finds the issue by key" do + Jiralicious::Issue.find("EX-1").should be_instance_of(Jiralicious::Issue) + issue = Jiralicious::Issue.find("EX-1") + end + + it "raises an exception when the issue can't be found or can't be viewed" do + lambda { + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1", + :body => '{"errorMessages": ["error"]}', + :status => ["404" "Not Found"]) + Jiralicious::Issue.find("EX-1") + }.should raise_error(Jiralicious::IssueNotFound) + end + + it "translates the JSON properly" do + issue = Jiralicious::Issue.find("EX-1") + issue.jira_key.should == "EX-1" + issue.jira_self.should == "http://example.com:8080/jira/rest/api/2.0/issue/EX-1" + end +end + +################################################################################################################# + +describe Jiralicious::Issue, "Managing Issues" do + + before :each do + Jiralicious.configure do |config| + config.username = "jstewart" + config.password = "topsecret" + config.uri = "http://jstewart:topsecret@localhost" + config.auth_type = :basic + config.api_version = "latest" + end + + FakeWeb.register_uri(:post, + "#{Jiralicious.rest_path}/issue/", + :status => "200", + :body => issue_create_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1", + :status => "200", + :body => issue_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/comment/", + :status => "200", + :body => comment_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/watchers/", + :status => "200", + :body => watchers_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-2", + :status => "200", + :body => issue_2_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-2/comment/", + :status => "200", + :body => '{"startAt": 0,"maxResults": 0,"total": 0,"comments": []}') + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-2/watchers/", + :status => "200", + :body => '{"self": "http://www.example.com/jira/rest/api/2/issue/EX-1/watchers","isWatching": false,"watchCount": 1,"watchers": [{"self": "http://www.example.com/jira/rest/api/2/user?username=fred","name": "fred","avatarUrls": {"16x16": "http://www.example.com/jira/secure/useravatar?size=small&ownerId=fred","48x48": "http://www.example.com/jira/secure/useravatar?size=large&ownerId=fred"},"displayName": "Fred F. User","active": false}]}') + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-3", + :status => "200", + :body => issue_3_json) + FakeWeb.register_uri(:put, + "#{Jiralicious.rest_path}/issue/EX-3", + :status => "200", + :body => issue_update_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-3/comment/", + :status => "200", + :body => '{"startAt": 0,"maxResults": 0,"total": 0,"comments": []}') + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-3/watchers/", + :status => "200", + :body => '{"self": "http://www.example.com/jira/rest/api/2/issue/EX-1/watchers","isWatching": false,"watchCount": 1,"watchers": [{"self": "http://www.example.com/jira/rest/api/2/user?username=fred","name": "fred","avatarUrls": {"16x16": "http://www.example.com/jira/secure/useravatar?size=small&ownerId=fred","48x48": "http://www.example.com/jira/secure/useravatar?size=large&ownerId=fred"},"displayName": "Fred F. User","active": false}]}') + end + + it "loads a hash in to the issue without subfields" do + issue = Jiralicious::Issue.new + issue.load(JSON.parse(issue_json), false) + issue.jira_key.should == 'EX-1' + issue.comments.count.should == 0 + issue.watchers.count.should == 0 + end + + it "loads a hash in to the issue with subfields" do + issue = Jiralicious::Issue.new + issue.load(JSON.parse(issue_json)) + issue.jira_key.should == 'EX-1' + issue.comments.comments.count.should == 1 + issue.watchers.watchers.count.should == 1 + end + + it "creates a new issue through fields" do + issue = Jiralicious::Issue.new + issue.fields.set_id("project", "10000") + issue.fields.set("summary", "this is a test of creating a scratch ticket") + issue.fields.set_id("issuetype", "7") + issue.fields.set_name("assignee", "stanley.handschuh") + issue.fields.set_id("priority", "1") + issue.fields.set("labels", ["new_label_p"]) + issue.fields.set("environment", "example of environment") + issue.fields.set("description", "example of the description extending") + issue.save! + issue.jira_key.should == 'EX-2' + issue.comments.comments.count.should == 0 + issue.watchers.watchers.count.should == 1 + end + + it "creates a new issue thgrough load with reload" do + hash = {"fields" => {"project" => {"id" => "10000"}, + "summary" => "this is a test of creating a scratch ticket", + "issuetype" => {"id" => "7"}, + "assignee" => {"name" => "stanley.handschuh"}, + "priority" => {"id" => "1"}, + "labels" => ["new_label_p"], + "environment" => "example of environment", + "description" => "example of the description extending" + }} + issue = Jiralicious::Issue.new + issue.load(hash, true) + issue.save! + issue.jira_key.should == 'EX-2' + issue.comments.comments.count.should == 0 + issue.watchers.watchers.count.should == 1 + end + + it "creates a new issue thgrough load without reload" do + hash = {"fields" => {"project" => {"id" => "10000"}, + "summary" => "this is a test of creating a scratch ticket", + "issuetype" => {"id" => "7"}, + "assignee" => {"name" => "stanley.handschuh"}, + "priority" => {"id" => "1"}, + "labels" => ["new_label_p"], + "environment" => "example of environment", + "description" => "example of the description extending" + }} + issue = Jiralicious::Issue.new + issue.load(hash) + issue.save! + issue.jira_key.should == 'EX-2' + issue.comments.comments.count.should == 0 + issue.watchers.watchers.count.should == 1 + end + + it "creates a new issue through new" do + hash = {"project" => {"id" => "10000"}, + "summary" => "this is a test of creating a scratch ticket", + "issuetype" => {"id" => "7"}, + "assignee" => {"name" => "stanley.handschuh"}, + "priority" => {"id" => "1"}, + "labels" => ["new_label_p"], + "environment" => "example of environment", + "description" => "example of the description extending" + } + issue = Jiralicious::Issue.new(hash) + issue.save! + issue.jira_key.should == 'EX-2' + issue.comments.comments.count.should == 0 + issue.watchers.watchers.count.should == 1 + end + + it "updates a new issue" do + issue = Jiralicious::Issue.find("EX-3") + issue.fields.append_a("labels", ["test_label"]) + issue.fields.append_s("description", " updated description ") + issue.save + issue.jira_key.should == 'EX-3' + issue['fields']['labels'].should == ["test_label"] + issue['fields']['description'].should == "example bug report updated description " + end +end + +################################################################################################################# + +describe Jiralicious::Issue, "Managing Issues" do + + before :each do + Jiralicious.configure do |config| + config.username = "jstewart" + config.password = "topsecret" + config.uri = "http://jstewart:topsecret@localhost" + config.auth_type = :basic + config.api_version = "latest" + end + + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1", + :status => "200", + :body => issue_json) + FakeWeb.register_uri(:delete, + "#{Jiralicious.rest_path}/issue/EX-1", + :status => "204") + FakeWeb.register_uri(:put, + "#{Jiralicious.rest_path}/issue/EX-1/assignee", + :status => "204") + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/comment/", + :status => "200", + :body => comment_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/watchers/", + :status => "200", + :body => watchers_json) + end + + it "update the assignee instance" do + issue = Jiralicious::Issue.find("EX-1") + response = issue.set_assignee("jira_admin") + response.response.class.should == Net::HTTPNoContent + end + + it "update the assignee class" do + response = Jiralicious::Issue.assignee("jira_admin", "EX-1") + response.response.class.should == Net::HTTPNoContent + end + + it "deletes the issue at the class level" do + response = Jiralicious::Issue.remove("EX-1") + response.response.class.should == Net::HTTPNoContent + end + + it "deletes the issue at the instance level" do + issue = Jiralicious::Issue.find("EX-1") + response = issue.remove + response.response.class.should == Net::HTTPNoContent + end +end + +################################################################################################################# + +describe Jiralicious::Issue, "Issue Information and Field Class" do + + before :each do + Jiralicious.configure do |config| + config.username = "jstewart" + config.password = "topsecret" + config.uri = "http://jstewart:topsecret@localhost" + config.auth_type = :basic + config.api_version = "latest" + end + + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/createmeta?projectKeys=EX&expand=projects.issuetypes.fields.&issuetypeIds=", + :status => "200", + :body => issue_createmeta_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/editmeta", + :status => "200", + :body => issue_editmeta_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1", + :status => "200", + :body => issue_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/comment/", + :status => "200", + :body => comment_json) + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/watchers/", + :status => "200", + :body => watchers_json) + end + + it "retrieve createmeta for project class level" do + meta = Jiralicious::Issue.createmeta("EX") + meta.class.should == Jiralicious::Field + meta.projects[0].key.should == "EX" + end + + it "retrieve createmeta for project instance level" do + issue = Jiralicious::Issue.find("EX-1") + meta = issue.createmeta + meta.class.should == Jiralicious::Field + meta.projects[0].key.should == "EX" + end + + it "retrieve editmeta for project class level" do + meta = Jiralicious::Issue.editmeta("EX-1") + meta.class.should == Jiralicious::Field + meta.key.should == "EX-1" + meta.fields.summary.required.should == false + end + + it "retrieve editmeta for project instance level" do + issue = Jiralicious::Issue.find("EX-1") + meta = issue.editmeta + meta.class.should == Jiralicious::Field + meta.key.should == "EX-1" + meta.jira_key.should == "EX-1" + meta.fields.summary.required.should == false + end + +end + +################################################################################################################# + +describe Jiralicious::Issue, "transitions" do + + before :each do + Jiralicious.configure do |config| + config.username = "jstewart" + config.password = "topsecret" + config.uri = "http://jstewart:topsecret@localhost" + config.auth_type = :basic + config.api_version = "latest" + end + + end + + it "returns list of possible transitions" do + FakeWeb.register_uri(:get, + "#{Jiralicious.rest_path}/issue/EX-1/transitions", + :status => "200", + :body => transitions_json) + + transitions = Jiralicious::Issue.get_transitions("#{Jiralicious.rest_path}/issue/EX-1/transitions") + transitions.should be_instance_of(Hash) + end + + it "performs transition" do + FakeWeb.register_uri(:post, + "#{Jiralicious.rest_path}/issue/EX-1/transitions", + :status => "204", + :body => nil) + + result = Jiralicious::Issue.transition("#{Jiralicious.rest_path}/issue/EX-1/transitions", + {"transition" => "3", "fields" => []}) + result.should be_nil + end + + it "raises an exception on transition failure" do + FakeWeb.register_uri(:post, + "#{Jiralicious.rest_path}/issue/EX-1/transitions", + :status => "400", + :body => %q{{"errorMessages":["Workflow operation is not valid"],"errors":{}}}) + lambda { + result = Jiralicious::Issue.transition("#{Jiralicious.rest_path}/issue/EX-1/transitions", + {"transition" => "invalid"}) + }.should raise_error(Jiralicious::TransitionError) + end + + it "raises an IssueNotFound exception if issue is not found" do + FakeWeb.register_uri(:post, + "#{Jiralicious.rest_path}/issue/EX-1/transitions", + :status => "404", + :body => %q{{"errorMessages":["Issue Does Not Exist"],"errors":{}}}) + lambda { + result = Jiralicious::Issue.transition("#{Jiralicious.rest_path}/issue/EX-1/transitions", + {"transition" => "invalid"}) + }.should raise_error(Jiralicious::IssueNotFound) + end +end