card 1.15.7 → 1.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/card.gemspec +3 -2
- data/config/initializers/inflections.rb +1 -1
- data/db/migrate_core_cards/20150528084659_add_session_cardtype.rb +0 -1
- data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +12 -0
- data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +11 -0
- data/db/migrate_core_cards/20150611203506_rails_inflection_updates.rb +82 -0
- data/db/migrate_core_cards/20150627205133_fix_script_bootstrap_card_type.rb +7 -0
- data/db/migrate_core_cards/20150702130543_remove_edit_toolbar_pinned.rb +9 -0
- data/db/schema.rb +81 -81
- data/db/seed/new/card_actions.yml +12581 -1647
- data/db/seed/new/card_acts.yml +1 -1
- data/db/seed/new/card_changes.yml +39326 -7569
- data/db/seed/new/card_references.yml +518 -455
- data/db/seed/new/cards.yml +1547 -1291
- data/db/seed/test/fixtures/card_actions.yml +13700 -2717
- data/db/seed/test/fixtures/card_acts.yml +314 -272
- data/db/seed/test/fixtures/card_changes.yml +45409 -13573
- data/db/seed/test/fixtures/card_references.yml +1223 -1125
- data/db/seed/test/fixtures/cards.yml +2694 -2433
- data/db/seed/test/fixtures/file1.txt +1 -0
- data/db/seed/test/fixtures/file2.txt +1 -0
- data/db/version_core_cards.txt +1 -1
- data/lib/card.rb +23 -13
- data/lib/card/auth.rb +6 -6
- data/lib/card/cache.rb +24 -5
- data/lib/card/env.rb +10 -10
- data/lib/card/format.rb +29 -12
- data/lib/card/log.rb +5 -3
- data/lib/card/migration.rb +17 -41
- data/lib/card/name.rb +12 -0
- data/lib/card/reference.rb +11 -12
- data/lib/card/set.rb +59 -6
- data/lib/card/simplecov_helper.rb +6 -1
- data/lib/card/spec_helper.rb +3 -2
- data/lib/card/view_cache.rb +77 -0
- data/lib/cardio.rb +30 -22
- data/mod/01_core/format/html_format.rb +17 -9
- data/mod/01_core/layout/blank.html +1 -1
- data/mod/01_core/layout/default.html +6 -16
- data/mod/01_core/layout/modal.html +9 -0
- data/mod/01_core/layout/noside.html +5 -12
- data/mod/01_core/layout/simple.html +1 -1
- data/mod/01_core/set/all/collection.rb +57 -5
- data/mod/01_core/set/all/content.rb +5 -7
- data/mod/01_core/set/all/name.rb +8 -10
- data/mod/01_core/set/all/permissions.rb +1 -2
- data/mod/01_core/set/all/phases.rb +5 -13
- data/mod/01_core/set/all/references.rb +10 -10
- data/mod/01_core/set/all/rules.rb +2 -2
- data/mod/01_core/set/all/tracked_attributes.rb +5 -3
- data/mod/01_core/set/all/utils.rb +79 -9
- data/mod/01_core/set/all/view_cache.rb +9 -0
- data/mod/01_core/spec/format/html_format_spec.rb +2 -2
- data/mod/01_core/spec/set/all/collection_spec.rb +1 -1
- data/mod/01_history/lib/card/act.rb +3 -1
- data/mod/01_history/lib/card/action.rb +20 -12
- data/mod/01_history/lib/card/change.rb +12 -8
- data/mod/01_history/set/all/actions.rb +2 -2
- data/mod/01_history/set/all/content_history.rb +3 -2
- data/mod/01_history/set/all/history.rb +57 -19
- data/mod/02_basic_types/set/all/rss.rb +5 -6
- data/mod/{05_standard → 02_basic_types}/set/type/html.rb +4 -3
- data/mod/02_basic_types/set/type/plain_text.rb +1 -1
- data/mod/02_basic_types/set/type/pointer.rb +7 -4
- data/mod/02_basic_types/spec/set/type/pointer_spec.rb +21 -17
- data/mod/03_machines/lib/card/machine.rb +33 -31
- data/mod/03_machines/lib/javascript/script_card_menu.js.coffee +2 -10
- data/mod/03_machines/lib/javascript/wagn.js.coffee +10 -10
- data/mod/03_machines/lib/javascript/wagn_mod.js.coffee +87 -40
- data/mod/03_machines/lib/stylesheets/style_cards.scss +26 -28
- data/mod/03_machines/set/right/machine_output.rb +3 -3
- data/mod/03_machines/set/type/coffee_script.rb +6 -6
- data/mod/03_machines/set/type/css.rb +1 -1
- data/mod/03_machines/set/type/java_script.rb +5 -6
- data/mod/03_machines/spec/lib/shared_machine_examples.rb +3 -1
- data/mod/03_machines/spec/set/type/scss_spec.rb +9 -10
- data/mod/04_settings/lib/card/setting.rb +16 -14
- data/mod/04_settings/set/right/structure.rb +6 -0
- data/mod/04_settings/set/self/add_help.rb +1 -1
- data/mod/04_settings/set/self/autoname.rb +1 -1
- data/mod/04_settings/set/self/captcha.rb +1 -1
- data/mod/04_settings/set/self/default.rb +1 -1
- data/mod/04_settings/set/self/help.rb +1 -1
- data/mod/04_settings/set/self/input.rb +1 -1
- data/mod/04_settings/set/self/layout.rb +1 -1
- data/mod/04_settings/set/self/on_create.rb +1 -1
- data/mod/04_settings/set/self/on_delete.rb +1 -1
- data/mod/04_settings/set/self/on_update.rb +1 -1
- data/mod/04_settings/set/self/options.rb +1 -1
- data/mod/04_settings/set/self/options_label.rb +1 -1
- data/mod/04_settings/set/self/script.rb +1 -1
- data/mod/04_settings/set/self/structure.rb +1 -1
- data/mod/04_settings/set/self/style.rb +1 -1
- data/mod/04_settings/set/self/table_of_contents.rb +1 -1
- data/mod/04_settings/set/self/thanks.rb +1 -1
- data/mod/05_email/set/all/follow.rb +3 -21
- data/mod/05_email/set/all/notify.rb +20 -4
- data/mod/05_email/set/right/follow.rb +16 -18
- data/mod/05_email/set/self/follow.rb +1 -1
- data/mod/05_email/spec/set/all/follow_spec.rb +6 -13
- data/mod/05_standard/set/all/attach.rb +23 -9
- data/mod/05_standard/set/all/error.rb +5 -7
- data/mod/05_standard/set/all/event_viz.rb +10 -6
- data/mod/05_standard/set/all/links.rb +37 -13
- data/mod/05_standard/set/all/rich_html/content.rb +46 -18
- data/mod/05_standard/set/all/rich_html/editing.rb +29 -25
- data/mod/05_standard/set/all/rich_html/form.rb +17 -10
- data/mod/05_standard/set/all/rich_html/header.rb +26 -4
- data/mod/05_standard/set/all/rich_html/menu.rb +17 -34
- data/mod/05_standard/set/all/rich_html/modal.rb +50 -12
- data/mod/05_standard/set/all/rich_html/toolbar.rb +178 -186
- data/mod/05_standard/set/all/rich_html/wrapper.rb +44 -21
- data/mod/05_standard/set/rstar/rules.rb +43 -53
- data/mod/05_standard/set/self/all.rb +2 -1
- data/mod/05_standard/set/self/head.rb +2 -2
- data/mod/05_standard/set/self/signin.rb +18 -18
- data/mod/05_standard/set/self/stats.rb +14 -2
- data/mod/05_standard/set/type/search_type.rb +9 -4
- data/mod/05_standard/set/type/session.rb +12 -7
- data/mod/05_standard/set/type/set.rb +135 -18
- data/mod/05_standard/spec/chunk/include_spec.rb +15 -16
- data/mod/05_standard/spec/set/all/account_spec.rb +21 -21
- data/mod/05_standard/spec/set/all/event_viz_spec.rb +7 -7
- data/mod/05_standard/spec/set/all/history_spec.rb +54 -24
- data/mod/05_standard/spec/set/all/rich_html/editing_spec.rb +42 -40
- data/mod/05_standard/spec/set/rstar/rules_spec.rb +1 -1
- data/mod/05_standard/spec/set/type/search_type_spec.rb +9 -1
- data/mod/05_standard/spec/set/type/signup_spec.rb +42 -42
- data/mod/06_bootstrap/lib/stylesheets/bootstrap_cards.scss +6 -0
- data/mod/06_bootstrap/set/all/bootstrap/form.rb +4 -5
- data/mod/06_bootstrap/set/all/bootstrap/helper.rb +145 -0
- data/mod/06_bootstrap/set/all/rich_bootstrap.rb +0 -59
- data/spec/lib/card/action_spec.rb +1 -1
- data/spec/lib/card/log_spec.rb +7 -7
- data/spec/models/card/cardtype_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +31 -6
- data/mod/04_settings/set/self/comment.rb +0 -2
@@ -1,9 +1,9 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
|
-
describe Card::Set::All::EventViz do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
3
|
+
# describe Card::Set::All::EventViz do
|
4
|
+
# describe '#events' do
|
5
|
+
# it "should have at least twenty events" do
|
6
|
+
# expect(Card['A'].events( :update ).split("\n").length).to be > 20
|
7
|
+
# end
|
8
|
+
# end
|
9
|
+
# end
|
@@ -8,34 +8,34 @@ describe Card::Set::All::History do
|
|
8
8
|
history = render_card :history, :name=>"A"
|
9
9
|
assert_view_select history, 'div[class~="card-frame"]'
|
10
10
|
end
|
11
|
-
|
12
|
-
|
11
|
+
|
12
|
+
|
13
13
|
describe '#action_summary' do
|
14
|
-
subject do
|
14
|
+
subject do
|
15
15
|
first = Card.fetch('First')
|
16
16
|
first.format.render_action_summary
|
17
17
|
end
|
18
18
|
it 'should have a summary' do
|
19
|
-
assert_view_select subject, 'del[class="diffdel diff-red"]', :text=>'chicken'
|
20
|
-
assert_view_select subject, 'ins[class="diffins diff-green"]', :text=>'chick'
|
19
|
+
assert_view_select subject, 'del[class="diffdel diff-red"]', :text=>'chicken'
|
20
|
+
assert_view_select subject, 'ins[class="diffins diff-green"]', :text=>'chick'
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
25
|
-
|
24
|
+
|
25
|
+
|
26
26
|
describe '#create_act_and_action' do
|
27
27
|
let!(:act_start_cnt) {Card::Act.count}
|
28
28
|
let(:content) {"Nobody expects the Spanish inquisition"}
|
29
29
|
let(:act) {@card.acts.last}
|
30
30
|
let(:action) {act.actions.last}
|
31
|
-
|
31
|
+
|
32
32
|
context 'for single card' do
|
33
33
|
before do
|
34
34
|
@card = Card::Auth.as_bot do
|
35
35
|
Card.create :name=>"single card", :content=>content
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
context 'when created' do
|
40
40
|
it 'adds new act' do
|
41
41
|
expect(Card::Act.count).to eq(act_start_cnt+1)
|
@@ -45,7 +45,7 @@ describe Card::Set::All::History do
|
|
45
45
|
expect(action.action_type).to eq(:create)
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
context 'when updated' do
|
50
50
|
it 'adds no act if nothing changed' do
|
51
51
|
@card.update_attributes :name=>"single card", :content=>content
|
@@ -56,7 +56,7 @@ describe Card::Set::All::History do
|
|
56
56
|
expect(Card::Act.count).to eq(act_start_cnt+2)
|
57
57
|
end
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
context 'when deleted' do
|
61
61
|
before do
|
62
62
|
Card::Auth.as_bot do
|
@@ -68,11 +68,41 @@ describe Card::Set::All::History do
|
|
68
68
|
end
|
69
69
|
it 'adds delete action' do
|
70
70
|
expect(action.action_type).to eq(:delete)
|
71
|
-
end
|
72
|
-
it 'adds trash change' do
|
73
|
-
expect(action.changes.last.field).to eq('trash')
|
74
|
-
expect(action.changes.last.value).to be_truthy
|
75
71
|
end
|
72
|
+
it 'adds trash change' do
|
73
|
+
expect(action.card_changes.last.field).to eq('trash')
|
74
|
+
expect(action.card_changes.last.value).to be_truthy
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'when creation fails' do
|
79
|
+
it "doesn't create an act" do
|
80
|
+
Card::Auth.as(:anonymous) do
|
81
|
+
act_count = Card::Act.count
|
82
|
+
Card.create :name=>"create fail"
|
83
|
+
expect(Card::Act.count).to eq act_count
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
it "doesn't create an action" do
|
88
|
+
Card::Auth.as(:anonymous) do
|
89
|
+
action_count = Card::Action.count
|
90
|
+
Card.create :name=>"create fail"
|
91
|
+
expect(Card::Action.count).to eq action_count
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
it "doesn't create act and actions if subcard fails" do
|
96
|
+
Card::Auth.as(:joe_user) do
|
97
|
+
act_count = Card::Act.count
|
98
|
+
action_count = Card::Action.count
|
99
|
+
Card.create :name=>"crete fail", :subcards=>{'*all+*create'=>''}
|
100
|
+
expect(Card::Action.count).to eq action_count
|
101
|
+
expect(Card::Act.count).to eq act_count
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
|
76
106
|
end
|
77
107
|
end
|
78
108
|
|
@@ -85,13 +115,13 @@ describe Card::Set::All::History do
|
|
85
115
|
@plus_action = act.actions[1]
|
86
116
|
end
|
87
117
|
end
|
88
|
-
|
118
|
+
|
89
119
|
context 'when created' do
|
90
120
|
it 'adds only a act for left card' do
|
91
121
|
expect(Card::Act.count).to eq(act_start_cnt+1)
|
92
122
|
expect(act.card).to eq(@card)
|
93
123
|
end
|
94
|
-
|
124
|
+
|
95
125
|
it 'adds three actions' do
|
96
126
|
expect(act.actions.size).to eq(3)
|
97
127
|
end
|
@@ -108,13 +138,13 @@ describe Card::Set::All::History do
|
|
108
138
|
expect(@plus_action.action_type).to eq(:create)
|
109
139
|
end
|
110
140
|
it 'adds content change' do
|
111
|
-
expect(@plus_action.
|
141
|
+
expect(@plus_action.card_changes.find_by_field_name(:db_content).value).to eq(content)
|
112
142
|
end
|
113
143
|
it 'adds superaction for plus card' do
|
114
144
|
expect(@plus_action.super_action_id).to eq(@left_action.id)
|
115
145
|
end
|
116
146
|
end
|
117
|
-
|
147
|
+
|
118
148
|
context 'when updated' do
|
119
149
|
it 'adds act for left card' do
|
120
150
|
@card.update_attributes :subcards=>{"+right"=>{:content=>"New content", :db_content=>"New Content"}}
|
@@ -130,7 +160,7 @@ describe Card::Set::All::History do
|
|
130
160
|
end
|
131
161
|
end
|
132
162
|
end
|
133
|
-
|
163
|
+
|
134
164
|
context 'for plus card' do
|
135
165
|
before do
|
136
166
|
Card::Auth.as_bot do
|
@@ -140,7 +170,7 @@ describe Card::Set::All::History do
|
|
140
170
|
@right_action = act.actions[2]
|
141
171
|
end
|
142
172
|
end
|
143
|
-
|
173
|
+
|
144
174
|
context 'adds' do
|
145
175
|
it 'only a act for plus card' do
|
146
176
|
expect(Card::Act.count).to eq(act_start_cnt+1)
|
@@ -148,7 +178,7 @@ describe Card::Set::All::History do
|
|
148
178
|
end
|
149
179
|
it 'three actions' do
|
150
180
|
expect(act.actions.size).to eq(3)
|
151
|
-
end
|
181
|
+
end
|
152
182
|
it 'action for left part of type create' do
|
153
183
|
expect(@left_action.card.name).to eq("left")
|
154
184
|
expect(@left_action.action_type).to eq(:create)
|
@@ -163,9 +193,9 @@ describe Card::Set::All::History do
|
|
163
193
|
it 'action for plus card of type create' do
|
164
194
|
expect(@plus_action.card.name).to eq("left+right")
|
165
195
|
expect(@plus_action.action_type).to eq(:create)
|
166
|
-
end
|
196
|
+
end
|
167
197
|
it 'content change' do
|
168
|
-
expect(@plus_action.
|
198
|
+
expect(@plus_action.card_changes(true).find_by_field_name(:db_content).value).to eq(content)
|
169
199
|
end
|
170
200
|
end
|
171
201
|
end
|
@@ -17,44 +17,46 @@ describe Card::Set::All::RichHtml::Editing do
|
|
17
17
|
end
|
18
18
|
end
|
19
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
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
20
|
+
# outdated
|
21
|
+
# TODO: write tests for new toolbar
|
22
|
+
# describe "edit view" do
|
23
|
+
# it "has toolbar with active 'content' pill" do
|
24
|
+
# assert_active_toolbar_pill :edit, 'content'
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# describe 'edit_type view' do
|
29
|
+
# it "has toolbar with active 'type' pill" do
|
30
|
+
# assert_active_toolbar_pill :edit_type, 'type'
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# describe 'edit_name view' do
|
35
|
+
# it "has toolbar with active 'name' pill" do
|
36
|
+
# assert_active_toolbar_pill :edit_name, 'name'
|
37
|
+
# end
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# describe 'edit_structure view' do
|
41
|
+
# before do
|
42
|
+
# @mycard = Card["Iliad"].format
|
43
|
+
# end
|
44
|
+
# it "has toolbar with active 'rules' pill" do
|
45
|
+
# Card::Auth.as_bot do
|
46
|
+
# assert_active_toolbar_pill :edit_structure, 'rules', true
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# describe 'edit_nests view' do
|
52
|
+
# before do
|
53
|
+
# Card::Auth.as_bot do
|
54
|
+
# Card.create! :name=>'Iliad+author', :content=>'Homer'
|
55
|
+
# end
|
56
|
+
# @mycard = Card["Iliad"].format
|
57
|
+
# end
|
58
|
+
# it "has toolbar with active 'nests' pill" do
|
59
|
+
# assert_active_toolbar_pill :edit_nests, 'nests'
|
60
|
+
# end
|
61
|
+
# end
|
60
62
|
end
|
@@ -7,7 +7,7 @@ describe Card::Set::Rstar::Rules do
|
|
7
7
|
expect(r).not_to match('No Card!')
|
8
8
|
#warn "r = #{r}"
|
9
9
|
assert_view_select r, 'table[class="set-rules table"]' do
|
10
|
-
assert_select 'a[href~="/*read+*right+*
|
10
|
+
assert_select 'a[href~="/*read+*right+*read?view=open_rule"]', :text => 'read'
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -25,5 +25,13 @@ describe Card::Set::Type::SearchType do
|
|
25
25
|
expect(r.scan('item-closed').size).to eq(2) #there are two of each
|
26
26
|
end
|
27
27
|
|
28
|
-
it ''
|
28
|
+
it 'handles type update from pointer' do
|
29
|
+
pointer_card = Card.create!(
|
30
|
+
:name=>"PointerToSearches",
|
31
|
+
:type_id=>Card::PointerID,
|
32
|
+
)
|
33
|
+
|
34
|
+
pointer_card.update_attributes! :type_id=>Card::SearchTypeID,:content=>%{{"type":"User"}}
|
35
|
+
expect(pointer_card.content).to eq(%{{"type":"User"}})
|
36
|
+
end
|
29
37
|
end
|
@@ -1,27 +1,27 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
3
|
describe Card::Set::Type::Signup do
|
4
|
-
|
4
|
+
|
5
5
|
before do
|
6
6
|
Card::Auth.current_id = Card::AnonymousID
|
7
7
|
end
|
8
|
-
|
9
|
-
|
8
|
+
|
9
|
+
|
10
10
|
context 'signup form form' do
|
11
11
|
before do
|
12
12
|
card = Card.new :type_id=>Card::SignupID
|
13
13
|
@form = card.format.render_new
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
it 'should prompt to signup' do
|
17
17
|
Card::Auth.as :anonymous do
|
18
18
|
expect(@form.match( /Sign up/ )).to be_truthy
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
23
22
|
|
24
|
-
|
23
|
+
|
24
|
+
|
25
25
|
context 'signup (without approval)' do
|
26
26
|
before do
|
27
27
|
ActionMailer::Base.deliveries = [] #needed?
|
@@ -29,15 +29,15 @@ describe Card::Set::Type::Signup do
|
|
29
29
|
Card::Auth.as_bot do
|
30
30
|
Card.create! :name=>'User+*type+*create', :content=>'[[Anyone]]'
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
Card::Auth.current_id = Card::AnonymousID
|
34
|
-
@signup = Card.create! :name=>'Big Bad Wolf', :type_id=>Card::SignupID,
|
35
|
-
'+*account'=>{'+*email'=>'wolf@wagn.org', '+*password'=>'wolf'}
|
36
|
-
|
34
|
+
@signup = Card.create! :name=>'Big Bad Wolf', :type_id=>Card::SignupID,
|
35
|
+
'+*account'=>{'+*email'=>'wolf@wagn.org', '+*password'=>'wolf'}
|
36
|
+
|
37
37
|
@account = @signup.account
|
38
38
|
@token = @account.token
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
it 'should create all the necessary cards' do
|
42
42
|
expect(@signup.type_id).to eq(Card::SignupID)
|
43
43
|
expect(@account.email).to eq('wolf@wagn.org')
|
@@ -46,22 +46,22 @@ describe Card::Set::Type::Signup do
|
|
46
46
|
expect(@account.password.length).to be > 10 #encrypted
|
47
47
|
expect(@account.token).to be_present
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
it 'should send email with an appropriate link' do
|
51
51
|
@mail = ActionMailer::Base.deliveries.last
|
52
52
|
expect( @mail.parts[0].body.raw_source ).to match(Card.setting( :title ))
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
it 'should create an authenticable token' do
|
56
56
|
expect(@account.token).to eq(@token)
|
57
57
|
expect(@account.authenticate_by_token(@token)).to eq(@signup.id)
|
58
58
|
expect(@account.fetch(:trait=> :token)).not_to be_present
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
it 'should notify someone' do
|
62
62
|
expect(ActionMailer::Base.deliveries.last.to).to eq(['signups@wagn.org'])
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
it 'should be activated by an update' do
|
66
66
|
Card::Env.params[:token] = @token
|
67
67
|
@signup.update_attributes({})
|
@@ -71,12 +71,12 @@ describe Card::Set::Type::Signup do
|
|
71
71
|
expect(@account.status).to eq('active')
|
72
72
|
expect(Card[ @account.name ].active?).to be_truthy
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
75
|
it 'should reject expired token and create new token' do
|
76
76
|
@account.token_card.update_column :updated_at, 8.days.ago.strftime("%F %T")
|
77
77
|
@account.token_card.expire
|
78
78
|
Card::Env.params[:token] = @token
|
79
|
-
|
79
|
+
|
80
80
|
result = @signup.update_attributes!({})
|
81
81
|
expect(result).to eq(true) # successfully completes save
|
82
82
|
@account.reload
|
@@ -96,8 +96,8 @@ describe Card::Set::Type::Signup do
|
|
96
96
|
'+*account'=>{ '+*email'=>'wolf@wagn.org', '+*password'=>'wolf' }
|
97
97
|
@account = @signup.account
|
98
98
|
end
|
99
|
-
|
100
|
-
|
99
|
+
|
100
|
+
|
101
101
|
it 'should create all the necessary cards, but no token' do
|
102
102
|
expect(@signup.type_id).to eq(Card::SignupID)
|
103
103
|
expect(@account.email).to eq('wolf@wagn.org')
|
@@ -105,11 +105,11 @@ describe Card::Set::Type::Signup do
|
|
105
105
|
expect(@account.salt).not_to eq('')
|
106
106
|
expect(@account.password.length).to be > 10 #encrypted
|
107
107
|
end
|
108
|
-
|
108
|
+
|
109
109
|
it 'should not create a token' do
|
110
110
|
expect(@account.token).not_to be_present
|
111
111
|
end
|
112
|
-
|
112
|
+
|
113
113
|
it 'sends signup alert email' do
|
114
114
|
signup_alert = ActionMailer::Base.deliveries.last
|
115
115
|
expect(signup_alert.to).to eq(['signups@wagn.org'])
|
@@ -118,33 +118,33 @@ describe Card::Set::Type::Signup do
|
|
118
118
|
expect(body).to include(@signup.name)
|
119
119
|
expect(body).to include('wolf@wagn.org')
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
end
|
123
|
-
|
123
|
+
|
124
124
|
it 'does not send verification email' do
|
125
125
|
expect(Mail::TestMailer.deliveries[-2]).to be_nil
|
126
126
|
end
|
127
|
-
|
128
|
-
|
127
|
+
|
128
|
+
|
129
129
|
context 'approval with token' do
|
130
|
-
|
130
|
+
|
131
131
|
it 'should create token' do
|
132
132
|
Card::Env.params[:approve_with_token] = true
|
133
133
|
Card::Auth.as :joe_admin
|
134
|
-
|
134
|
+
|
135
135
|
@signup = Card.fetch @signup.id
|
136
136
|
@signup.save!
|
137
137
|
expect(@signup.account.token).to be_present
|
138
138
|
end
|
139
|
-
|
139
|
+
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
context 'approval without token' do
|
143
|
-
|
143
|
+
|
144
144
|
it 'should create token' do
|
145
145
|
Card::Env.params[:approve_without_token] = true
|
146
146
|
Card::Auth.as :joe_admin
|
147
|
-
|
147
|
+
|
148
148
|
@signup = Card.fetch @signup.id
|
149
149
|
@signup.save!
|
150
150
|
expect(@signup.account.token).not_to be_present
|
@@ -154,36 +154,36 @@ describe Card::Set::Type::Signup do
|
|
154
154
|
end
|
155
155
|
|
156
156
|
end
|
157
|
-
|
157
|
+
|
158
158
|
context 'a welcome email card exists' do
|
159
159
|
before do
|
160
|
-
Card::Auth.as_bot do
|
161
|
-
Card.create! :name=>'welcome email', :subcards=>{'+*subject'=>'welcome',
|
160
|
+
Card::Auth.as_bot do
|
161
|
+
Card.create! :name=>'welcome email', :subcards=>{'+*subject'=>'welcome',
|
162
162
|
'+*html_message'=>'Welcome {{_self|name}}'}, :type_id=>Card::EmailTemplateID
|
163
163
|
end
|
164
164
|
Mail::TestMailer.deliveries.clear
|
165
|
-
@signup = Card.create! :name=>'Big Bad Sheep', :type_id=>Card::SignupID,
|
166
|
-
'+*account'=>{'+*email'=>'sheep@wagn.org', '+*password'=>'sheep'}
|
167
|
-
|
165
|
+
@signup = Card.create! :name=>'Big Bad Sheep', :type_id=>Card::SignupID,
|
166
|
+
'+*account'=>{'+*email'=>'sheep@wagn.org', '+*password'=>'sheep'}
|
167
|
+
|
168
168
|
end
|
169
169
|
it 'sends welcome email when account is activated' do
|
170
170
|
@signup.activate_account
|
171
171
|
@mail = ActionMailer::Base.deliveries.find{ |a| a.subject == 'welcome' }
|
172
172
|
Mail::TestMailer.deliveries.clear
|
173
|
-
|
173
|
+
|
174
174
|
expect(@mail).to be_truthy
|
175
175
|
expect(@mail.body.raw_source ).to include('Welcome Big Bad Sheep')
|
176
176
|
end
|
177
177
|
end
|
178
|
-
|
178
|
+
|
179
179
|
context 'invitation' do
|
180
180
|
before do
|
181
181
|
# NOTE: by default Anonymous does not have permission to create User cards.
|
182
|
-
Card::Auth.current_id = Card::WagnBotID
|
182
|
+
Card::Auth.current_id = Card::WagnBotID
|
183
183
|
@signup = Card.create! :name=>'Big Bad Wolf', :type_id=>Card::SignupID, '+*account'=>{ '+*email'=>'wolf@wagn.org'}
|
184
184
|
@account = @signup.account
|
185
185
|
end
|
186
|
-
|
186
|
+
|
187
187
|
it 'should create all the necessary cards, but no password' do
|
188
188
|
expect(@signup.type_id).to eq(Card::SignupID)
|
189
189
|
expect(@account.email).to eq('wolf@wagn.org')
|
@@ -192,7 +192,7 @@ describe Card::Set::Type::Signup do
|
|
192
192
|
expect(@account.token).to be_present
|
193
193
|
expect(@account.password).not_to be_present
|
194
194
|
end
|
195
|
-
|
195
|
+
|
196
196
|
end
|
197
197
|
|
198
198
|
# describe '#signup_notifications' do
|