require File.expand_path("#{File.dirname(__FILE__)}/test_helper") module CRP describe ReviewPoster do HOST = "crp.example.com" CLIENT = "client" KEY = "A1B2c3DeFGhi" REVIEW_TYPE = 1 REVIEW_CONTENT = "I am a very cheerful and good-humored." DESCRIPTION = REVIEW_CONTENT IMAGE_URL = "http://example.com/image.jpg" INTERNAL_REVIEW_ID = "ABCDE12345" GENDER = :female USERNAME = "starryheart28" AGE = 28 it "accepts a host" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.instance_variable_get(:@host).must_equal(HOST) end it "accepts a client" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.instance_variable_get(:@client).must_equal(CLIENT) end it "accepts a key" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.instance_variable_get(:@key).must_equal(KEY) end it "requires a host" do ENV['CRP_HOST'] = nil lambda { ReviewPoster.new(nil, CLIENT, KEY) }.must_raise(ArgumentError) end it "requires a non empty host" do ENV['CRP_HOST'] = nil lambda { ReviewPoster.new("", CLIENT, KEY) }.must_raise(ArgumentError) end it "requires a client" do ENV['CRP_CLIENT'] = nil lambda { ReviewPoster.new(HOST, nil, KEY) }.must_raise(ArgumentError) end it "requires a non empty client" do ENV['CRP_CLIENT'] = nil lambda { ReviewPoster.new(HOST, "", KEY) }.must_raise(ArgumentError) end it "requires a key" do ENV['CRP_KEY'] = nil lambda { ReviewPoster.new(HOST, CLIENT, nil) }.must_raise(ArgumentError) end it "requires a non empty key" do ENV['CRP_KEY'] = nil lambda { ReviewPoster.new(HOST, CLIENT, "") }.must_raise(ArgumentError) end it "uses the environment variables if the host, client and key are missing" do ENV['CRP_HOST'] = HOST ENV['CRP_CLIENT'] = CLIENT ENV['CRP_KEY'] = KEY lambda { ReviewPoster.new }.must_be_silent ENV['CRP_HOST'] = nil ENV['CRP_CLIENT'] = nil ENV['CRP_KEY'] = nil end describe :new_username_review do let(:new_username_review_url) { "https://crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:1,%22reviewContent%22:%22starryheart28%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=057bbe8cea1047c6173af865a78f1fbed75ca270" } before do @new_review_request = stub_new_review_request(new_username_review_url) end it "sends the review to CRP" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.new_username_review(INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE) assert_requested(@new_review_request) end it "returns a review response" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.new_username_review(INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse) end end describe :new_description_review do let(:new_description_review_url) { "https://crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:2,%22reviewContent%22:%22I%20am%20a%20very%20cheerful%20and%20good-humored.%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=863c18a8b6c538f29771568dcc0b82453d110f07" } before do @new_review_request = stub_new_review_request(new_description_review_url) end it "sends the review to CRP" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.new_description_review(DESCRIPTION, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE) assert_requested(@new_review_request) end it "returns a review response" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.new_description_review(DESCRIPTION, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse) end end describe :new_image_review do let(:new_image_review_url) { "https://crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:3,%22reviewContent%22:%22http://example.com/image.jpg%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=3cc4b50fc6734d02506b8778df8c971c8bdafead" } before do @new_review_request = stub_new_review_request(new_image_review_url) end it "sends the review to CRP" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.new_image_review(IMAGE_URL, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE) assert_requested(@new_review_request) end it "returns a review response" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.new_image_review(IMAGE_URL, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse) end end describe :new_review do let(:new_review_url) { "https://crp.example.com/api/v1/Review/newReview?client=client&arguments=%5B%7B%22reviewType%22%3A1%2C%22reviewContent%22%3A%22I+am+a+very+cheerful+and+good-humored.%22%2C%22internalReviewId%22%3A%22ABCDE12345%22%2C%22gender%22%3A1%2C%22username%22%3A%22starryheart28%22%2C%22age%22%3A28%7D%5D&signature=77ce496ea7f78ae7b6deab0d492b265a81276cb6" } before do @new_review_request = stub_new_review_request(new_review_url) end it "sends the review to CRP" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.new_review(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE) assert_requested(@new_review_request) end it "returns a review response" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) review_poster.new_review(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse) end end describe :new_review_url do it "returns the new review URI" do review_poster = ReviewPoster.new(HOST, CLIENT, KEY) uri = review_poster.new_review_url(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE) uri.to_s.must_equal("https://crp.example.com/api/v1/Review/newReview?client=client&arguments=%5B%7B%22reviewType%22%3A1%2C%22reviewContent%22%3A%22I+am+a+very+cheerful+and+good-humored.%22%2C%22internalReviewId%22%3A%22ABCDE12345%22%2C%22gender%22%3A1%2C%22username%22%3A%22starryheart28%22%2C%22age%22%3A28%7D%5D&signature=77ce496ea7f78ae7b6deab0d492b265a81276cb6") end end end end