carrier 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/Gemfile +11 -7
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/app/controllers/carrier/messages_controller.rb +7 -2
  5. data/app/views/carrier/messages/_message.html.erb +1 -2
  6. data/app/views/carrier/messages/_reply.html.erb +2 -2
  7. data/app/views/carrier/messages/show.html.erb +0 -3
  8. data/carrier.gemspec +29 -23
  9. data/config/locales/carrier.en.yml +4 -0
  10. data/config/locales/carrier.ru.yml +4 -0
  11. data/lib/carrier/rails/engine.rb +1 -1
  12. data/spec/dummy/app/helpers/application_helper.rb +1 -0
  13. data/spec/dummy/app/views/devise/registrations/new.html.erb +3 -0
  14. data/spec/dummy/app/views/layouts/application.html.erb +1 -1
  15. data/spec/dummy/config/cucumber.yml +8 -0
  16. data/spec/dummy/config/database.yml +2 -2
  17. data/spec/dummy/config/environments/test.rb +2 -0
  18. data/spec/dummy/db/schema.rb +12 -12
  19. data/spec/dummy/factories/message.rb +9 -0
  20. data/spec/dummy/factories/user.rb +13 -0
  21. data/spec/dummy/features/carrier.feature +79 -0
  22. data/spec/dummy/features/step_definitions/debug_steps.rb +15 -0
  23. data/spec/dummy/features/step_definitions/resources_steps.rb +15 -0
  24. data/spec/dummy/features/step_definitions/web_steps.rb +301 -0
  25. data/spec/dummy/features/support/carrier_routes_helper.rb +5 -0
  26. data/spec/dummy/features/support/env.rb +47 -0
  27. data/spec/dummy/features/support/paths.rb +34 -0
  28. data/spec/dummy/features/support/rails_helper.rb +50 -0
  29. data/spec/dummy/features/support/singleton.rb +17 -0
  30. data/spec/dummy/features/support/transaction.rb +30 -0
  31. data/spec/dummy/lib/tasks/cucumber.rake +65 -0
  32. data/spec/dummy/script/cucumber +10 -0
  33. data/spec/dummy_spec_helper.rb +12 -26
  34. metadata +189 -136
  35. data/TODO +0 -1
  36. data/script/rails +0 -6
  37. data/spec/integration/carrier_spec.rb +0 -73
  38. data/test/helper.rb +0 -18
  39. data/test/test_carrier.rb +0 -7
data/Gemfile CHANGED
@@ -6,22 +6,26 @@ gem 'unread'
6
6
  gem 'sugar-high'
7
7
  gem 'sweetloader'
8
8
 
9
- group :development, :test do
10
- gem 'rails', '~>3.1'
9
+ group :development do
11
10
  gem 'unicorn'
11
+ gem 'rake-kit'
12
+ gem "jeweler", ">= 1.6.4"
13
+ end
14
+
15
+ group :development, :test do
16
+ gem 'rails', '3.2.2'
12
17
  gem 'mysql2'
13
18
  gem 'devise'
14
- gem 'rake-kit'
15
19
  gem 'cutter'
16
- gem "jeweler", ">= 1.6.4"
17
- gem "rspec-rails", '>= 2.5'
20
+ # gem 'ruby-debug19', :require => "ruby-debug"
18
21
  end
19
22
 
20
23
  group :test do
21
- gem 'capybara'
22
- gem 'factory_girl'
24
+ gem "rspec-rails", '>= 2.5'
25
+ gem 'factory_girl_rails'
23
26
  gem 'spork'
24
27
  gem "launchy"
25
28
  gem 'shoulda'
29
+ gem 'cucumber-rails'
26
30
  end
27
31
 
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ end
22
22
  Jeweler::RubygemsDotOrgTasks.new
23
23
 
24
24
 
25
- require 'rake/rdoctask'
25
+ require 'rdoc/task'
26
26
 
27
27
  Rake::RDocTask.new(:rdoc) do |rdoc|
28
28
  rdoc.rdoc_dir = 'rdoc'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -3,7 +3,13 @@
3
3
  module Carrier
4
4
  class MessagesController < ApplicationController
5
5
 
6
- after_filter :only => [:show] { @message.mark_as_read! :for => current_user }
6
+ before_filter :only => [:show] do
7
+ @message = Message.find(params[:id], :include => :chain)
8
+
9
+ @message.chain_messages.each do |message|
10
+ message.mark_as_read! :for => current_user
11
+ end
12
+ end
7
13
 
8
14
  def reply
9
15
  @message = Message.new_answer params[:id], current_user
@@ -24,7 +30,6 @@ module Carrier
24
30
  end
25
31
 
26
32
  def show
27
- @message = Message.find(params[:id], :include => :chain)
28
33
  end
29
34
 
30
35
  # TODO: introduce [:id or :username] key to be passed with to= param
@@ -1,8 +1,7 @@
1
- <%= content_tag :div, :class => "message_collapse", :id => "message-#{message.id}" do %>
1
+ <%= content_tag_for :div, message do %>
2
2
  <div class="message_ma_wrapper ma_open">
3
3
  <div class="message_ma_date"><%= raw message.date_formatted %></div>
4
4
  <div class="message_ma_user"><%= message.sender_name %></div>
5
- <div class="message_ma_subj"><b><%= message.subject %></b></div>
6
5
  <div><%= message.content %></div>
7
6
  </div>
8
7
  <% end %>
@@ -5,7 +5,7 @@
5
5
  <div class="message_ma_new_wrapper replay_message_ma">
6
6
  <h4><span class=""><%= current_user.username %></span> &rArr; <span class="red"><%= @message.recipients_names %></span></h4>
7
7
  <div class="field">
8
- <%= f.label "Сообщение:" %><br />
8
+ <%= f.label :content, t('views.carrier.reply_content') %><br />
9
9
  <%= f.text_area :content, :rows => 6 %>
10
10
  </div>
11
11
 
@@ -16,7 +16,7 @@
16
16
  <%= f.hidden_field :subject %>
17
17
 
18
18
  <div class="actions">
19
- <%= f.submit 'Отправить' %>
19
+ <%= f.submit t('views.carrier.reply_send') %>
20
20
  </div>
21
21
  </div>
22
22
  <% end %>
@@ -21,9 +21,6 @@
21
21
  <div class="message_ma_user">
22
22
  <%= @message.sender_name %>
23
23
  </div>
24
- <div class="message_ma_subj">
25
- <b><%= @message.subject %></b>
26
- </div>
27
24
  <div>
28
25
  <%= simple_format @message.content %>
29
26
  </div>
@@ -5,17 +5,16 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "carrier"
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["stanislaw"]
12
- s.date = "2011-12-23"
12
+ s.date = "2012-04-05"
13
13
  s.description = "Raw github-like messaging system to reuse across Rails apps. Acts as Rails 3.1 mountable engine. Fast and robust."
14
14
  s.email = "s.pankevich@gmail.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
- "README.textile",
18
- "TODO"
17
+ "README.textile"
19
18
  ]
20
19
  s.files = [
21
20
  ".document",
@@ -25,7 +24,6 @@ Gem::Specification.new do |s|
25
24
  "MIT-LICENSE",
26
25
  "README.textile",
27
26
  "Rakefile",
28
- "TODO",
29
27
  "VERSION",
30
28
  "app/assets/images/.gitkeep",
31
29
  "app/assets/images/carrier/chosen-sprite.png",
@@ -84,7 +82,6 @@ Gem::Specification.new do |s|
84
82
  "lib/carrier/rails/helpers.rb",
85
83
  "lib/carrier/version.rb",
86
84
  "lib/tasks/carrier_tasks.rake",
87
- "script/rails",
88
85
  "spec/carrier/app/controllers/application_controller_spec.rb",
89
86
  "spec/carrier/app/models/message_scopes_spec.rb",
90
87
  "spec/carrier/app/models/message_spec.rb",
@@ -129,6 +126,7 @@ Gem::Specification.new do |s|
129
126
  "spec/dummy/config.ru",
130
127
  "spec/dummy/config/application.rb",
131
128
  "spec/dummy/config/boot.rb",
129
+ "spec/dummy/config/cucumber.yml",
132
130
  "spec/dummy/config/database.yml",
133
131
  "spec/dummy/config/database_mysql.yml",
134
132
  "spec/dummy/config/database_pgsql.yml",
@@ -154,11 +152,25 @@ Gem::Specification.new do |s|
154
152
  "spec/dummy/db/migrate/20110814164229_create_chains.rb",
155
153
  "spec/dummy/db/schema.rb",
156
154
  "spec/dummy/db/seeds.rb",
155
+ "spec/dummy/factories/message.rb",
156
+ "spec/dummy/factories/user.rb",
157
+ "spec/dummy/features/carrier.feature",
158
+ "spec/dummy/features/step_definitions/debug_steps.rb",
159
+ "spec/dummy/features/step_definitions/resources_steps.rb",
160
+ "spec/dummy/features/step_definitions/web_steps.rb",
161
+ "spec/dummy/features/support/carrier_routes_helper.rb",
162
+ "spec/dummy/features/support/env.rb",
163
+ "spec/dummy/features/support/paths.rb",
164
+ "spec/dummy/features/support/rails_helper.rb",
165
+ "spec/dummy/features/support/singleton.rb",
166
+ "spec/dummy/features/support/transaction.rb",
167
+ "spec/dummy/lib/tasks/cucumber.rake",
157
168
  "spec/dummy/log/.gitkeep",
158
169
  "spec/dummy/public/404.html",
159
170
  "spec/dummy/public/422.html",
160
171
  "spec/dummy/public/500.html",
161
172
  "spec/dummy/public/favicon.ico",
173
+ "spec/dummy/script/cucumber",
162
174
  "spec/dummy/script/rails",
163
175
  "spec/dummy/test/fixtures/posts.yml",
164
176
  "spec/dummy/test/fixtures/users.yml",
@@ -169,18 +181,15 @@ Gem::Specification.new do |s|
169
181
  "spec/dummy/test/unit/post_test.rb",
170
182
  "spec/dummy/test/unit/user_test.rb",
171
183
  "spec/dummy_spec_helper.rb",
172
- "spec/integration/carrier_spec.rb",
173
184
  "spec/requests/main_spec.rb",
174
185
  "spec/support/controller_macros.rb",
175
186
  "spec/support/factories.rb",
176
- "spec/support/rspec_helpers.rb",
177
- "test/helper.rb",
178
- "test/test_carrier.rb"
187
+ "spec/support/rspec_helpers.rb"
179
188
  ]
180
189
  s.homepage = "http://github.com/stanislaw/carrier"
181
190
  s.licenses = ["MIT"]
182
191
  s.require_paths = ["lib"]
183
- s.rubygems_version = "1.8.11"
192
+ s.rubygems_version = "1.8.19"
184
193
  s.summary = "Raw github-like messaging system to reuse across Rails apps"
185
194
 
186
195
  if s.respond_to? :specification_version then
@@ -192,28 +201,26 @@ Gem::Specification.new do |s|
192
201
  s.add_runtime_dependency(%q<unread>, [">= 0"])
193
202
  s.add_runtime_dependency(%q<sugar-high>, [">= 0"])
194
203
  s.add_runtime_dependency(%q<sweetloader>, [">= 0"])
195
- s.add_development_dependency(%q<rails>, ["~> 3.1"])
196
204
  s.add_development_dependency(%q<unicorn>, [">= 0"])
205
+ s.add_development_dependency(%q<rake-kit>, [">= 0"])
206
+ s.add_development_dependency(%q<jeweler>, [">= 1.6.4"])
207
+ s.add_development_dependency(%q<rails>, ["= 3.2.2"])
197
208
  s.add_development_dependency(%q<mysql2>, [">= 0"])
198
209
  s.add_development_dependency(%q<devise>, [">= 0"])
199
- s.add_development_dependency(%q<rake-kit>, [">= 0"])
200
210
  s.add_development_dependency(%q<cutter>, [">= 0"])
201
- s.add_development_dependency(%q<jeweler>, [">= 1.6.4"])
202
- s.add_development_dependency(%q<rspec-rails>, [">= 2.5"])
203
211
  else
204
212
  s.add_dependency(%q<require_all>, [">= 0"])
205
213
  s.add_dependency(%q<kaminari>, [">= 0"])
206
214
  s.add_dependency(%q<unread>, [">= 0"])
207
215
  s.add_dependency(%q<sugar-high>, [">= 0"])
208
216
  s.add_dependency(%q<sweetloader>, [">= 0"])
209
- s.add_dependency(%q<rails>, ["~> 3.1"])
210
217
  s.add_dependency(%q<unicorn>, [">= 0"])
218
+ s.add_dependency(%q<rake-kit>, [">= 0"])
219
+ s.add_dependency(%q<jeweler>, [">= 1.6.4"])
220
+ s.add_dependency(%q<rails>, ["= 3.2.2"])
211
221
  s.add_dependency(%q<mysql2>, [">= 0"])
212
222
  s.add_dependency(%q<devise>, [">= 0"])
213
- s.add_dependency(%q<rake-kit>, [">= 0"])
214
223
  s.add_dependency(%q<cutter>, [">= 0"])
215
- s.add_dependency(%q<jeweler>, [">= 1.6.4"])
216
- s.add_dependency(%q<rspec-rails>, [">= 2.5"])
217
224
  end
218
225
  else
219
226
  s.add_dependency(%q<require_all>, [">= 0"])
@@ -221,14 +228,13 @@ Gem::Specification.new do |s|
221
228
  s.add_dependency(%q<unread>, [">= 0"])
222
229
  s.add_dependency(%q<sugar-high>, [">= 0"])
223
230
  s.add_dependency(%q<sweetloader>, [">= 0"])
224
- s.add_dependency(%q<rails>, ["~> 3.1"])
225
231
  s.add_dependency(%q<unicorn>, [">= 0"])
232
+ s.add_dependency(%q<rake-kit>, [">= 0"])
233
+ s.add_dependency(%q<jeweler>, [">= 1.6.4"])
234
+ s.add_dependency(%q<rails>, ["= 3.2.2"])
226
235
  s.add_dependency(%q<mysql2>, [">= 0"])
227
236
  s.add_dependency(%q<devise>, [">= 0"])
228
- s.add_dependency(%q<rake-kit>, [">= 0"])
229
237
  s.add_dependency(%q<cutter>, [">= 0"])
230
- s.add_dependency(%q<jeweler>, [">= 1.6.4"])
231
- s.add_dependency(%q<rspec-rails>, [">= 2.5"])
232
238
  end
233
239
  end
234
240
 
@@ -45,6 +45,10 @@ en:
45
45
  new_subject: "Subject"
46
46
  new_content: "Message"
47
47
  new_send: "Send"
48
+
49
+ reply_send: "Reply"
50
+ reply_content: "Message"
51
+
48
52
  no_messages: "No messages yet"
49
53
  #last: "Last &raquo;"
50
54
  #previous: "&lsaquo; Prev"
@@ -49,6 +49,10 @@ ru:
49
49
  new_subject: "Тема"
50
50
  new_content: "Сообщение"
51
51
  new_send: "Отправить"
52
+
53
+ reply_send: "Ответить"
54
+ reply_content: "Сообщение"
55
+
52
56
  no_messages: "Сообщений нет"
53
57
  #last: "Last &raquo;"
54
58
  #previous: "&lsaquo; Prev"
@@ -2,7 +2,7 @@ module Carrier
2
2
 
3
3
  def self.carrier_requires
4
4
  validators = Dir[File.join ::Carrier.config.root, "app/validators/**/*.rb"]
5
- models = Dir[File.join ::Carrier.config.root, "app/models/**/*.rb"]
5
+ models = Dir[File.join ::Carrier.config.root, "app/models/carrier/**/*.rb"]
6
6
 
7
7
  (validators + models).each do |rb_file|
8
8
  require_dependency rb_file
@@ -1,2 +1,3 @@
1
1
  module ApplicationHelper
2
+ include Carrier::ApplicationHelper
2
3
  end
@@ -6,6 +6,9 @@
6
6
  <p><%= f.label :email %><br />
7
7
  <%= f.email_field :email %></p>
8
8
 
9
+ <p><%= f.label :username %><br />
10
+ <%= f.text_field :username %></p>
11
+
9
12
  <p><%= f.label :password %><br />
10
13
  <%= f.password_field :password %></p>
11
14
 
@@ -11,6 +11,6 @@
11
11
  <%= yield %>
12
12
 
13
13
  <%= link_to 'Carrier', '/carrier' %>
14
- <%= link_to 'Sign out', destroy_user_session_path, :method => :delete %>
14
+ <%= link_to 'Sign out', main_app.destroy_user_session_path, :method => :delete %>
15
15
  </body>
16
16
  </html>
@@ -0,0 +1,8 @@
1
+ <%
2
+ rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
3
+ rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
4
+ std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"
5
+ %>
6
+ default: <%= std_opts %> features
7
+ wip: --tags @wip:3 --wip features
8
+ rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
@@ -3,7 +3,7 @@ development:
3
3
  host: localhost
4
4
  database: carrier_development
5
5
  username: root
6
- password: root
6
+ password:
7
7
  encoding: utf8
8
8
 
9
9
  test: &test
@@ -11,7 +11,7 @@ test: &test
11
11
  host: localhost
12
12
  database: carrier_test
13
13
  username: root
14
- password: root
14
+ password:
15
15
  encoding: utf8
16
16
 
17
17
  production:
@@ -7,6 +7,8 @@ Dummy::Application.configure do
7
7
  # and recreated between test runs. Don't rely on the data there!
8
8
  config.cache_classes = true
9
9
 
10
+ config.use_transactional_fixtures = true
11
+
10
12
  # Configure static asset server for tests with Cache-Control for performance
11
13
  config.serve_static_assets = true
12
14
  config.static_cache_control = "public, max-age=3600"
@@ -14,14 +14,14 @@
14
14
  ActiveRecord::Schema.define(:version => 20110814164229) do
15
15
 
16
16
  create_table "chains", :force => true do |t|
17
- t.string "participants", :default => "--- []\n\n"
18
- t.string "archived_for", :default => "--- []\n\n"
17
+ t.string "participants", :default => "--- []\n"
18
+ t.string "archived_for", :default => "--- []\n"
19
19
  t.integer "having_chain_id"
20
20
  t.string "having_chain_type"
21
- t.string "chain_type", :default => "--- :simple\n"
21
+ t.string "chain_type", :default => "--- :simple\n...\n"
22
22
  t.integer "messages_count", :default => 0
23
- t.datetime "created_at"
24
- t.datetime "updated_at"
23
+ t.datetime "created_at", :null => false
24
+ t.datetime "updated_at", :null => false
25
25
  end
26
26
 
27
27
  add_index "chains", ["archived_for", "participants"], :name => "participants_and_archived_index"
@@ -30,21 +30,21 @@ ActiveRecord::Schema.define(:version => 20110814164229) do
30
30
 
31
31
  create_table "messages", :force => true do |t|
32
32
  t.integer "sender"
33
- t.string "recipients", :default => "--- []\n\n"
33
+ t.string "recipients", :default => "--- []\n"
34
34
  t.string "subject"
35
35
  t.text "content"
36
36
  t.boolean "last", :default => false
37
37
  t.integer "chain_id"
38
- t.datetime "created_at"
39
- t.datetime "updated_at"
38
+ t.datetime "created_at", :null => false
39
+ t.datetime "updated_at", :null => false
40
40
  end
41
41
 
42
42
  add_index "messages", ["chain_id"], :name => "index_messages_on_chain_id"
43
43
  add_index "messages", ["created_at"], :name => "index_messages_on_created_at"
44
44
 
45
45
  create_table "posts", :force => true do |t|
46
- t.datetime "created_at"
47
- t.datetime "updated_at"
46
+ t.datetime "created_at", :null => false
47
+ t.datetime "updated_at", :null => false
48
48
  end
49
49
 
50
50
  create_table "read_marks", :force => true do |t|
@@ -69,8 +69,8 @@ ActiveRecord::Schema.define(:version => 20110814164229) do
69
69
  t.string "last_sign_in_ip"
70
70
  t.string "name"
71
71
  t.string "username"
72
- t.datetime "created_at"
73
- t.datetime "updated_at"
72
+ t.datetime "created_at", :null => false
73
+ t.datetime "updated_at", :null => false
74
74
  end
75
75
 
76
76
  add_index "users", ["email"], :name => "index_users_on_email", :unique => true
@@ -0,0 +1,9 @@
1
+ FactoryGirl.define do
2
+ factory :message, :class => Carrier::Message do
3
+ sender_user { |su| singleton(:user) }
4
+ recipients { |r| [ singleton(:second_user).id ] }
5
+
6
+ content "content of test message"
7
+ subject "subject of test message"
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ FactoryGirl.define do
2
+ factory :user do
3
+ email 'stanislaw@gmail.com'
4
+ username 'stanislaw'
5
+ password '666666'
6
+ end
7
+
8
+ factory :second_user, :class => User do
9
+ email 'miloviza@gmail.com'
10
+ username 'milovila'
11
+ password '666666'
12
+ end
13
+ end
@@ -0,0 +1,79 @@
1
+ Feature:
2
+ In order to have simple github-like messaging functionality on my site
3
+ As a user
4
+ I want to send, receive and manage messages easily
5
+
6
+ Scenario: Listing Carrier main page when there are no messages created
7
+ Given I am logged in as user
8
+ When I am on Carrier's main page
9
+ Then I should see "No messages yet"
10
+
11
+ Scenario: Listing Carrier inbox page when there is a message I sent
12
+ Given There is user with username "stanislaw"
13
+ And There is second user with username "miloviza"
14
+ And There is a message with content "Hello, Miloviza!"
15
+ And I am logged in as user
16
+ When I am on Carrier's 'inbox' page
17
+ Then I should see "No messages yet"
18
+
19
+ Scenario: Listing Carrier 'sent' page when there is a message I sent
20
+ Given There is user with username "stanislaw"
21
+ And There is second user with username "miloviza"
22
+ And There is a message with content "Hello, Miloviza!"
23
+ And I am logged in as user
24
+ When I am on Carrier's 'sent' page
25
+ Then I should see "Hello, Miloviza!"
26
+
27
+
28
+ Scenario: Creating a message
29
+ Given There is user with username "stanislaw"
30
+ And There is second user with username "miloviza"
31
+ And I am logged in as user
32
+ And I go to new message path
33
+ And I select "miloviza" from "Recipients"
34
+ And I fill in "Subject" with "Subject for test message"
35
+ And I fill in "Message" with "Content for test message"
36
+ And I press "Send"
37
+ Then I should see "Message successfully created"
38
+ Then I should see "Subject for test message"
39
+ Then I should see "Content for test message"
40
+
41
+ @javascript
42
+ Scenario: Archiving a message
43
+ Given There is user with username "stanislaw"
44
+ And I am logged in as user
45
+
46
+ And There is second user with username "miloviza"
47
+ And There is a message with content "Hello, Miloviza!"
48
+ And I go to this message page
49
+ When I click "Archive!"
50
+ Then I should see "Thread archived"
51
+
52
+ @javascript
53
+ Scenario: Un-archiving a message
54
+ Given There is user with username "stanislaw"
55
+ And I am logged in as user
56
+
57
+ And There is second user with username "miloviza"
58
+ And There is a message with content "Hello, Miloviza!"
59
+ And I go to this message page
60
+ And I click "Archive!"
61
+ Then I should see "Unarchive?"
62
+
63
+ When I click "Unarchive?"
64
+ Then I should see "Archive!"
65
+
66
+ @javascript
67
+ Scenario: Answering a message
68
+ Given There is user with username "stanislaw"
69
+ And I am logged in as user
70
+
71
+ And There is second user with username "miloviza"
72
+ And There is a message with content "Hello, Miloviza!"
73
+ And I go to this message page
74
+
75
+ And I click "Reply into thread"
76
+ And I fill in "Message" with "This is the answer to the message"
77
+ And I press "Reply"
78
+ Then I should see "This is the answer to the message"
79
+ Then I should not see "Reply" within "#reply_form"