aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models/info_request_batch_spec.rb
blob: 8914da3fa3b4ba3267ecf070f4d097d253092bea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe InfoRequestBatch, "when validating" do

    before do
        @info_request_batch = FactoryGirl.build(:info_request_batch)
    end

    it 'should require a user' do
        @info_request_batch.user = nil
        @info_request_batch.valid?.should be_false
        @info_request_batch.errors.full_messages.should == ["User can't be blank"]
    end

    it 'should require a title' do
        @info_request_batch.title = nil
        @info_request_batch.valid?.should be_false
        @info_request_batch.errors.full_messages.should == ["Title can't be blank"]
    end

    it 'should require a body' do
        @info_request_batch.body = nil
        @info_request_batch.valid?.should be_false
        @info_request_batch.errors.full_messages.should == ["Body can't be blank"]
    end

end

describe InfoRequestBatch, "when finding an existing batch" do

    before do
        @first_body = FactoryGirl.create(:public_body)
        @second_body = FactoryGirl.create(:public_body)
        @info_request_batch = FactoryGirl.create(:info_request_batch, :title => 'Matched title',
                                                                      :body => 'Matched body',
                                                                      :public_bodies => [@first_body,
                                                                                         @second_body])
    end

    it 'should return a batch with the same user, title and body sent to one of the same public bodies' do
        InfoRequestBatch.find_existing(@info_request_batch.user,
                                       @info_request_batch.title,
                                       @info_request_batch.body,
                                       [@first_body]).should_not be_nil
    end

    it 'should not return a batch with the same title and body sent to another public body' do
        InfoRequestBatch.find_existing(@info_request_batch.user,
                                       @info_request_batch.title,
                                       @info_request_batch.body,
                                       [FactoryGirl.create(:public_body)]).should be_nil
    end

    it 'should not return a batch sent the same public bodies with a different title and body' do
        InfoRequestBatch.find_existing(@info_request_batch.user,
                                       'Other title',
                                       'Other body',
                                       [@first_body]).should be_nil
    end

    it 'should not return a batch sent to one of the same public bodies with the same title and body by
        a different user' do
        InfoRequestBatch.find_existing(FactoryGirl.create(:user),
                                       @info_request_batch.title,
                                       @info_request_batch.body,
                                       [@first_body]).should be_nil
    end
end

describe InfoRequestBatch, "when creating a batch", :focus => true do

    before do
        @title = 'A test title'
        @body = "Dear [Authority name],\nA message\nYours faithfully,\nRequester"
        @first_public_body = FactoryGirl.create(:public_body)
        @second_public_body = FactoryGirl.create(:public_body)
        @user = FactoryGirl.create(:user)
        @info_request_batch = InfoRequestBatch.create!({:title => @title,
                                                       :body => @body,
                                                       :public_bodies => [@first_public_body,
                                                                          @second_public_body],
                                                       :user => @user})
    end

    it 'should substitute authority name for the placeholder in each request' do
        unrequestable = @info_request_batch.create_batch!
        [@first_public_body, @second_public_body].each do |public_body|
            request = @info_request_batch.info_requests.detect do |info_request|
                info_request.public_body == public_body
            end
            expected = "Dear #{public_body.name},\nA message\nYours faithfully,\nRequester"
            request.outgoing_messages.first.body.should == expected
        end
    end

    it 'should send requests to requestable public bodies, and return a list of unrequestable ones' do
        @first_public_body.stub(:is_requestable?).and_return(false)
        unrequestable = @info_request_batch.create_batch!
        unrequestable.should == [@first_public_body]
        @info_request_batch.info_requests.size.should == 1
        request = @info_request_batch.info_requests.first
        request.outgoing_messages.first.status.should == 'sent'
    end

    it 'should set the sent_at value of the info request batch' do
        @info_request_batch.create_batch!
        @info_request_batch.sent_at.should_not be_nil
    end

end