create_community_test.rb
3.28 KB
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
require File.dirname(__FILE__) + '/../test_helper'
class CreateCommunityTest < Test::Unit::TestCase
  def setup
    @person = create_user('testing').person
  end
  attr_reader :person
  should 'provide needed data' do
    task = CreateCommunity.new
    Community.fields + %w[ name closed tag_list ].each do |field|
      assert task.respond_to?(field)
      assert task.respond_to?("#{field}=")
    end
  end
  should 'require a requestor' do
    task = CreateCommunity.new(:name => 'community test', :target => Environment.default)
    task.valid?
    assert task.errors.invalid?(:requestor_id)
    task.requestor = person
    task.valid?
    assert !task.errors.invalid?(:requestor_id)
  end
  should 'actually create a community when finishing the task and associate the task requestor as its admin' do
    task = CreateCommunity.create!({
      :name => 'My new community',
      :requestor => person,
      :target => Environment.default,
    })
    assert_difference Community, :count do
      task.finish
    end
    assert_equal person, Community['my-new-community'].admins.first
  end
  should 'override message methods from Task' do
    specific = CreateCommunity.new
    %w[ task_created_message task_finished_message task_cancelled_message ].each do |method|
      assert_nothing_raised NotImplementedError do
        specific.send(method)
      end
    end
  end
  should 'provide a message to be sent to the target' do
    assert_not_nil CreateCommunity.new(:name => 'test comm', :requestor => person).target_notification_message
  end
  should 'report as approved when approved' do
    request = CreateCommunity.new
    request.stubs(:status).returns(Task::Status::FINISHED)
    assert request.approved?
  end
  should 'report as rejected when rejected' do
    request = CreateCommunity.new
    request.stubs(:status).returns(Task::Status::CANCELLED)
    assert request.rejected?
  end
  should 'create a community with image when finishing the task' do
    task = CreateCommunity.create!({
      :name => 'My new community',
      :requestor => person,
      :target => Environment.default,
      :image_builder => {:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')}
    })
    assert_equal 'rails.png', task.image.filename
    assert_difference Community, :count do
      task.finish
    end
    assert_equal 'rails.png', Community['my-new-community'].image.filename
  end
  should 'have target notification message' do
    task = CreateCommunity.new(:name => 'community test', :target => Environment.default, :requestor => person)
    assert_match(/requested to create community.*to approve or reject/, task.target_notification_message)
  end
  should 'have target notification description' do
    task = CreateCommunity.new(:name => 'community test', :target => Environment.default, :requestor => person)
    assert_match(/#{task.requestor.name} wants to create community #{task.subject}/, task.target_notification_description)
  end
  should 'deliver target notification message' do
    task = CreateCommunity.new(:name => 'community test', :target => Environment.default, :requestor => person)
    email = TaskMailer.deliver_target_notification(task, task.target_notification_message)
    assert_match(/#{task.requestor.name} wants to create community #{task.subject}/, email.subject)
  end
end