discuss 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/MIT-LICENSE +20 -0
- data/README.md +153 -0
- data/Rakefile +34 -0
- data/app/assets/javascripts/discuss/application.js +3 -0
- data/app/assets/javascripts/discuss/chosen.jquery.js +1104 -0
- data/app/assets/javascripts/discuss/compose.coffee +21 -0
- data/app/assets/javascripts/discuss/discuss.chosen.coffee +2 -0
- data/app/assets/javascripts/discuss/discuss.coffee +2 -0
- data/app/assets/javascripts/discuss/messages.coffee +0 -0
- data/app/assets/stylesheets/discuss/application.css +13 -0
- data/app/assets/stylesheets/discuss/chosen.css +439 -0
- data/app/controllers/discuss/application_controller.rb +11 -0
- data/app/controllers/discuss/mailboxes_controller.rb +30 -0
- data/app/controllers/discuss/messages_controller.rb +85 -0
- data/app/helpers/discuss/application_helper.rb +7 -0
- data/app/models/discuss/conversation.rb +29 -0
- data/app/models/discuss/mailbox.rb +33 -0
- data/app/models/discuss/message.rb +135 -0
- data/app/services/discuss/message_sender.rb +33 -0
- data/app/views/discuss/mailboxes/show.html.haml +24 -0
- data/app/views/discuss/messages/_form.html.haml +18 -0
- data/app/views/discuss/messages/edit.html.haml +1 -0
- data/app/views/discuss/messages/new.html.haml +1 -0
- data/app/views/discuss/messages/show.html.haml +28 -0
- data/app/views/discuss/shared/_nav.haml +8 -0
- data/config/routes.rb +15 -0
- data/db/migrate/20130419055252_setup_discuss.rb +22 -0
- data/lib/discuss.rb +4 -0
- data/lib/discuss/engine.rb +9 -0
- data/lib/discuss/models/discussable.rb +29 -0
- data/lib/discuss/version.rb +3 -0
- data/lib/generators/discuss/views_generator.rb +8 -0
- data/lib/tasks/discuss_tasks.rake +4 -0
- data/test/discuss_test.rb +7 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +5 -0
- data/test/dummy/app/assets/javascripts/chosen.jquery.js +1104 -0
- data/test/dummy/app/assets/javascripts/compose.coffee +21 -0
- data/test/dummy/app/assets/javascripts/discuss.chosen.coffee +2 -0
- data/test/dummy/app/assets/javascripts/discuss.coffee +2 -0
- data/test/dummy/app/assets/javascripts/messages.coffee +0 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/assets/stylesheets/chosen.css +439 -0
- data/test/dummy/app/assets/stylesheets/discuss.css +41 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/user.rb +22 -0
- data/test/dummy/app/views/layouts/application.html.erb +17 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +9 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +27 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20130428235128_create_users.rb +11 -0
- data/test/dummy/db/schema.rb +24 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +16219 -0
- data/test/dummy/log/test.log +191354 -0
- data/test/dummy/public/404.html +27 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +26 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0a28667732e1be8938cde061b6f996df +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0ddd7cc29057a69bd29fde03bf0f4c00 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0de2f69502366965bb7fae2623bc190c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0ee691067e6ec8f03df58bc94badd25d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1b77abb6bee52fa8d68ee7e81077ff20 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/271bb8f72971af6089be8d1b85788bec +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2a499e57eb2664f139ab0e74571faa77 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/32b6af14546cb11e773fb3799f041132 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4728f8b9616c35f685674fbeecaa3c47 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4e9a3e121da30d3a85273a5c283da214 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5620ff4659033b350ea3031ecaeb5127 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/596293af7e4dcfa45880435ae753f876 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/614995c5e7b1b4f5b12ce060404706cc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6b9e24a8aad25948823e1a93c8be731e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/78a00003621b318a297e05cfedb0d1fd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/794654d117cd2ec6a9a00e485d9f4485 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/79ae3a9f48e9b9e8ef2922c844b1895f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b5889bea21f2af8068646890752932c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9fd02d20091838d6411df2d23a5364d5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a02345b542298f25d3f701ee680c44c0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a80359c0e09ddf510ce63de09a368d4c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ad2a9bfe4169e0a5bc66efd35c83fe38 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b1794788ec8ce362aceaffa31c7381e9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b284f477944d67f25c0672dba1a2dab4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b2b1f16cf54d69c151ca7f42fb2f8381 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b4767dfdb540517d26dc8c5365736f53 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bab78b46d2a6282e5df747dd8b6d5abf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9a09977565da30179ad7fdb9f79ae0d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d9c8047218dc90a46a6725543638de45 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e5b181eb056bbd6ffad37ed146b0342e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/0a28667732e1be8938cde061b6f996df +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/0ddd7cc29057a69bd29fde03bf0f4c00 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/0de2f69502366965bb7fae2623bc190c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1b77abb6bee52fa8d68ee7e81077ff20 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/271bb8f72971af6089be8d1b85788bec +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/32b6af14546cb11e773fb3799f041132 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4728f8b9616c35f685674fbeecaa3c47 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5620ff4659033b350ea3031ecaeb5127 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/596293af7e4dcfa45880435ae753f876 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/78a00003621b318a297e05cfedb0d1fd +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/794654d117cd2ec6a9a00e485d9f4485 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/79ae3a9f48e9b9e8ef2922c844b1895f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9b5889bea21f2af8068646890752932c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9fd02d20091838d6411df2d23a5364d5 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a02345b542298f25d3f701ee680c44c0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a80359c0e09ddf510ce63de09a368d4c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ad2a9bfe4169e0a5bc66efd35c83fe38 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/bab78b46d2a6282e5df747dd8b6d5abf +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c9a09977565da30179ad7fdb9f79ae0d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d9c8047218dc90a46a6725543638de45 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/features/workflow_test.rb +182 -0
- data/test/test_helper.rb +68 -0
- data/test/unit/discuss/conversation_test.rb +79 -0
- data/test/unit/discuss/mailbox_test.rb +72 -0
- data/test/unit/discuss/message_test.rb +73 -0
- data/test/unit/discuss/recipient_test.rb +56 -0
- data/test/unit/discuss/sender_test.rb +106 -0
- data/test/unit/helpers/discuss/messages_helper_test.rb +6 -0
- metadata +422 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
|
5
|
+
<style>
|
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
|
7
|
+
div.dialog {
|
|
8
|
+
width: 25em;
|
|
9
|
+
padding: 0 4em;
|
|
10
|
+
margin: 4em auto 0 auto;
|
|
11
|
+
border: 1px solid #ccc;
|
|
12
|
+
border-right-color: #999;
|
|
13
|
+
border-bottom-color: #999;
|
|
14
|
+
}
|
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<!-- This file lives in public/404.html -->
|
|
21
|
+
<div class="dialog">
|
|
22
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
|
23
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
|
24
|
+
</div>
|
|
25
|
+
<p>If you are the application owner check the logs for more information.</p>
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
|
5
|
+
<style>
|
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
|
7
|
+
div.dialog {
|
|
8
|
+
width: 25em;
|
|
9
|
+
padding: 0 4em;
|
|
10
|
+
margin: 4em auto 0 auto;
|
|
11
|
+
border: 1px solid #ccc;
|
|
12
|
+
border-right-color: #999;
|
|
13
|
+
border-bottom-color: #999;
|
|
14
|
+
}
|
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<!-- This file lives in public/422.html -->
|
|
21
|
+
<div class="dialog">
|
|
22
|
+
<h1>The change you wanted was rejected.</h1>
|
|
23
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
|
24
|
+
</div>
|
|
25
|
+
</body>
|
|
26
|
+
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
|
5
|
+
<style>
|
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
|
7
|
+
div.dialog {
|
|
8
|
+
width: 25em;
|
|
9
|
+
padding: 0 4em;
|
|
10
|
+
margin: 4em auto 0 auto;
|
|
11
|
+
border: 1px solid #ccc;
|
|
12
|
+
border-right-color: #999;
|
|
13
|
+
border-bottom-color: #999;
|
|
14
|
+
}
|
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<!-- This file lives in public/500.html -->
|
|
21
|
+
<div class="dialog">
|
|
22
|
+
<h1>We're sorry, but something went wrong.</h1>
|
|
23
|
+
</div>
|
|
24
|
+
<p>If you are the application owner check the logs for more information.</p>
|
|
25
|
+
</body>
|
|
26
|
+
</html>
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class WorkFlowTest< FeatureTest
|
|
4
|
+
|
|
5
|
+
it 'seeing an empty inbox' do
|
|
6
|
+
visit "/discuss/mailbox/inbox" # discuss.mailbox_path(:inbox)
|
|
7
|
+
assert page.has_content?('Inbox')
|
|
8
|
+
assert page.has_content?('0 messages')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context 'new message' do
|
|
12
|
+
it 'composes a draft' do
|
|
13
|
+
visit '/discuss/message/compose'
|
|
14
|
+
select 'bart simpsons', from: 'Recipients'
|
|
15
|
+
fill_in 'Subject', with: 'camping trip'
|
|
16
|
+
fill_in 'Your message', with: "who's bringing what?"
|
|
17
|
+
check 'Draft'
|
|
18
|
+
click_on 'Send message'
|
|
19
|
+
|
|
20
|
+
assert page.has_css?('div.notice')
|
|
21
|
+
assert_equal 1, Discuss::Mailbox.new(@sender).drafts.count
|
|
22
|
+
assert_equal 0, Discuss::Mailbox.new(@recipient).inbox.count
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'sends a message' do
|
|
26
|
+
visit '/discuss/message/compose'
|
|
27
|
+
select 'bart simpsons', from: 'Recipients'
|
|
28
|
+
fill_in 'Subject', with: 'camping trip'
|
|
29
|
+
fill_in 'Your message', with: "who's bringing what?"
|
|
30
|
+
click_on 'Send message'
|
|
31
|
+
assert page.has_css?('div.notice')
|
|
32
|
+
assert_equal 1, Discuss::Mailbox.new(@sender).outbox.count
|
|
33
|
+
assert_equal 1, Discuss::Mailbox.new(@recipient).inbox.count
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context 'with messages' do
|
|
38
|
+
before do
|
|
39
|
+
@draft = @sender.messages.create(body: 'only for me eyes', recipients: [@lisa])
|
|
40
|
+
@message = @sender.messages.create(body: 'lorem ipsum', recipients: [@recipient])
|
|
41
|
+
@message.send!
|
|
42
|
+
@outbox = Discuss::Mailbox.new(@sender).outbox
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'redirects to inbox if message is not mine' do
|
|
46
|
+
message = Discuss::Message.last
|
|
47
|
+
visit "/discuss/mailbox/inbox/#{message.id}"
|
|
48
|
+
assert_equal "/discuss/mailbox/inbox", current_path
|
|
49
|
+
refute page.has_content?(message.body)
|
|
50
|
+
refute page.has_css?('.reply')
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'sees an outbox' do
|
|
54
|
+
assert_equal 1, @outbox.count
|
|
55
|
+
|
|
56
|
+
visit '/discuss/mailbox/outbox'
|
|
57
|
+
assert page.has_content?('1 message')
|
|
58
|
+
within '.messages' do
|
|
59
|
+
assert page.has_content?(@recipient.to_s)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'sees drafts' do
|
|
64
|
+
visit '/discuss/mailbox/drafts'
|
|
65
|
+
assert page.has_content?('Drafts')
|
|
66
|
+
|
|
67
|
+
within '.messages' do
|
|
68
|
+
assert page.has_content?(@draft.body)
|
|
69
|
+
assert page.has_content?(@lisa.to_s)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'sees trash' do
|
|
74
|
+
@draft.trash!
|
|
75
|
+
@outbox.first.trash!
|
|
76
|
+
visit '/discuss/mailbox/trash'
|
|
77
|
+
assert page.has_content?('Trash')
|
|
78
|
+
assert page.has_content?('2 messages')
|
|
79
|
+
|
|
80
|
+
within '.messages' do
|
|
81
|
+
assert_equal 2, page.all('.discuss_message').size
|
|
82
|
+
assert page.has_content?(@draft.body)
|
|
83
|
+
assert page.has_content?(@recipient.to_s)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'moves a message to trash' do
|
|
88
|
+
visit "/discuss/message/#{@message.id}"
|
|
89
|
+
click_on 'Move to trash'
|
|
90
|
+
assert page.has_content?('Message moved to trash')
|
|
91
|
+
assert_equal 0, Discuss::Mailbox.new(@sender).outbox.count
|
|
92
|
+
assert_equal 1, Discuss::Mailbox.new(@sender).trash.count
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'empties trash' do
|
|
96
|
+
@message.trash!
|
|
97
|
+
assert_equal 1, Discuss::Mailbox.new(@sender).trash.count
|
|
98
|
+
|
|
99
|
+
visit '/discuss/mailbox/trash'
|
|
100
|
+
click_on 'Empty trash'
|
|
101
|
+
assert page.has_content?('Trash has been emptied')
|
|
102
|
+
assert_equal 0, Discuss::Mailbox.new(@sender).trash.count
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'views a sent message' do
|
|
106
|
+
visit "/discuss/message/#{@message.id}"
|
|
107
|
+
|
|
108
|
+
within '.headers' do
|
|
109
|
+
assert page.has_content?(@message.sender)
|
|
110
|
+
assert page.has_content?('Recipients: bart simpsons')
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'views a recieved message' do
|
|
115
|
+
message = Discuss::Mailbox.new(@recipient).inbox.first
|
|
116
|
+
message.reply! body: 'first reply'
|
|
117
|
+
recieved_message = Discuss::Mailbox.new(@sender).inbox.last
|
|
118
|
+
|
|
119
|
+
visit "/discuss/message/#{recieved_message.id}"
|
|
120
|
+
within 'div.compose' do
|
|
121
|
+
assert page.has_xpath?("//form[@action='/discuss/message/#{recieved_message.id}/reply']")
|
|
122
|
+
refute page.has_content?('Recipients')
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'redirects to show view if uneditable?' do
|
|
127
|
+
visit "/discuss/message/#{@message.id}/edit"
|
|
128
|
+
assert_equal "/discuss/message/#{@message.id}", current_path
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it 'redirects to edit view if unsent?' do
|
|
132
|
+
visit "/discuss/message/#{@draft.id}"
|
|
133
|
+
assert_equal "/discuss/message/#{@draft.id}/edit", current_path
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it 'sends a draft' do
|
|
137
|
+
visit "/discuss/message/#{@draft.id}/edit"
|
|
138
|
+
fill_in 'Subject', with: 'great to go public'
|
|
139
|
+
fill_in 'Your message', with: 'not for my eyes only anymore'
|
|
140
|
+
click_on 'Send message'
|
|
141
|
+
|
|
142
|
+
assert page.has_css?('div.notice')
|
|
143
|
+
assert_equal 0, Discuss::Mailbox.new(@sender).drafts.count
|
|
144
|
+
assert_equal 1, Discuss::Mailbox.new(@lisa).inbox.count
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it 'edits a draft' do
|
|
148
|
+
visit "/discuss/message/#{@draft.id}/edit"
|
|
149
|
+
fill_in 'Subject', with: 'not yet'
|
|
150
|
+
check 'Draft'
|
|
151
|
+
click_on 'Send message'
|
|
152
|
+
|
|
153
|
+
assert page.has_css?('div.notice')
|
|
154
|
+
assert_equal 1, Discuss::Mailbox.new(@sender).drafts.count
|
|
155
|
+
assert_equal 0, Discuss::Mailbox.new(@lisa).inbox.count
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it 'does not see reply form if I sent the message' do
|
|
159
|
+
assert_equal @sender, @message.sender
|
|
160
|
+
visit "/discuss/message/#{@message.id}"
|
|
161
|
+
refute page.has_css?('.compose.reply')
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it 'replies' do
|
|
165
|
+
message = Discuss::Mailbox.new(@recipient).inbox.first
|
|
166
|
+
message.reply! body: 'first reply'
|
|
167
|
+
recieved_message = Discuss::Mailbox.new(@sender).inbox.last
|
|
168
|
+
|
|
169
|
+
visit "/discuss/message/#{recieved_message.id}"
|
|
170
|
+
|
|
171
|
+
within 'div.compose' do
|
|
172
|
+
fill_in 'Your message', with: 'This is what I think on your previous message'
|
|
173
|
+
click_on 'Reply'
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
assert page.has_css?('div.notice')
|
|
177
|
+
assert_equal 2, Discuss::Mailbox.new(@sender).outbox.count
|
|
178
|
+
assert_equal 2, Discuss::Mailbox.new(@recipient).inbox.count
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Configure Rails Environment
|
|
2
|
+
ENV['RAILS_ENV'] = 'test'
|
|
3
|
+
require File.expand_path('../dummy/config/environment.rb', __FILE__)
|
|
4
|
+
|
|
5
|
+
require 'rails/test_help'
|
|
6
|
+
require 'minitest/autorun'
|
|
7
|
+
require 'minitest/spec'
|
|
8
|
+
require 'minitest/mock'
|
|
9
|
+
require 'capybara/rails'
|
|
10
|
+
require 'debugger'
|
|
11
|
+
|
|
12
|
+
require 'minitest/reporters'
|
|
13
|
+
MiniTest::Reporters.use! MiniTest::Reporters::SpecReporter.new
|
|
14
|
+
|
|
15
|
+
Rails.backtrace_cleaner.remove_silencers!
|
|
16
|
+
|
|
17
|
+
# Load support files
|
|
18
|
+
Dir['#{File.dirname(__FILE__)}/support/**/*.rb'].each { |f| require f }
|
|
19
|
+
|
|
20
|
+
require 'database_cleaner'
|
|
21
|
+
DatabaseCleaner.strategy = :truncation
|
|
22
|
+
|
|
23
|
+
class MiniTest::Spec
|
|
24
|
+
before(:each) do
|
|
25
|
+
DatabaseCleaner.start
|
|
26
|
+
create_users
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
after(:each) { DatabaseCleaner.clean }
|
|
30
|
+
|
|
31
|
+
class << self
|
|
32
|
+
alias context describe
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class FeatureTest < MiniTest::Spec
|
|
37
|
+
include Rails.application.routes.url_helpers # to get url_helpers working
|
|
38
|
+
include Capybara::DSL # to get capybara working
|
|
39
|
+
|
|
40
|
+
before(:each) do
|
|
41
|
+
create_users
|
|
42
|
+
bypass_user
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
after(:each) { restore_user }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def create_users
|
|
50
|
+
@sender = User.where(email: 'teacher@school.com', first_name: 'teacher').first_or_create
|
|
51
|
+
@recipient = User.where(email: 'bart@student.com', first_name: 'bart', last_name: 'simpsons').first_or_create
|
|
52
|
+
@lisa = User.where(email: 'lisa@student.com', first_name: 'lisa', last_name: 'simpsons').first_or_create
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def bypass_user(user=User.first)
|
|
57
|
+
current_user = @sender unless @current_user
|
|
58
|
+
Discuss::ApplicationController.send(:alias_method, :old_user, :discuss_current_user)
|
|
59
|
+
Discuss::ApplicationController.send(:define_method, :discuss_current_user) do
|
|
60
|
+
current_user
|
|
61
|
+
end
|
|
62
|
+
@current_user = current_user
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def restore_user
|
|
67
|
+
Discuss::ApplicationController.send(:alias_method, :discuss_current_user, :old_user)
|
|
68
|
+
end
|