date_book 0.0.6 → 0.1.0
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 +4 -4
- data/.rubocop.yml +9 -1
- data/.rubocop_todo.yml +2 -1
- data/.travis.yml +3 -0
- data/Gemfile +16 -4
- data/Gemfile.lock +14 -2
- data/VERSION +1 -1
- data/app/assets/javascripts/date_book/calendar_events.js +3 -3
- data/app/assets/stylesheets/date_book.css.scss +31 -2
- data/app/controllers/date_book/calendars_controller.rb +30 -19
- data/app/controllers/date_book/date_book_controller.rb +1 -1
- data/app/controllers/date_book/events_controller.rb +60 -62
- data/app/controllers/date_book/graphql_controller.rb +10 -11
- data/app/graphql/date_book_schema.rb +4 -4
- data/app/graphql/types/calendar_type.rb +4 -2
- data/app/graphql/types/date_time_type.rb +9 -5
- data/app/graphql/types/event_occurrence_type.rb +4 -2
- data/app/graphql/types/event_type.rb +4 -2
- data/app/graphql/types/mutation_type.rb +3 -1
- data/app/graphql/types/query_type.rb +12 -26
- data/app/helpers/date_book/application_helper.rb +4 -7
- data/app/helpers/date_book/events_helper.rb +43 -23
- data/app/views/date_book/application/_date_range.html.haml +3 -3
- data/app/views/date_book/calendars/index.html.haml +19 -3
- data/app/views/date_book/calendars/show.html.haml +29 -4
- data/app/views/date_book/events/_event.json.jbuilder +3 -1
- data/app/views/date_book/events/_form.html.haml +4 -4
- data/app/views/date_book/events/_occurrence_dates.html.haml +3 -3
- data/app/views/date_book/events/fields/_date.html.haml +1 -1
- data/app/views/date_book/events/fields/_day.html.haml +1 -1
- data/app/views/date_book/events/fields/_day_of_week.html.haml +3 -3
- data/app/views/date_book/events/fields/_duration.html.haml +3 -3
- data/app/views/date_book/events/fields/_interval.html.haml +1 -1
- data/app/views/date_book/events/fields/_time.html.haml +1 -1
- data/app/views/date_book/events/index.html.haml +1 -1
- data/app/views/date_book/events/rules/_daily.html.haml +3 -3
- data/app/views/date_book/events/rules/_monthly.html.haml +4 -4
- data/app/views/date_book/events/rules/_singular.html.haml +3 -3
- data/app/views/date_book/events/rules/_weekly.html.haml +4 -4
- data/app/views/date_book/events/show.html.haml +1 -1
- data/app/views/layouts/_date_book_scripts.html.haml +2 -4
- data/config/locales/en.yml +2 -0
- data/config/routes.rb +1 -1
- data/date_book.gemspec +25 -22
- data/db/migrate/20170807133845_create_calendars.rb +3 -0
- data/db/migrate/20170807133846_create_events.rb +3 -0
- data/db/migrate/20170807133847_create_schedules.rb +9 -6
- data/db/migrate/20170807133848_add_fields_to_schedule.rb +3 -0
- data/db/migrate/20170807133849_create_event_occurrences.rb +4 -3
- data/db/migrate/20170807133850_add_fields_to_event_occurrences.rb +3 -0
- data/lib/date_book.rb +11 -2
- data/lib/date_book/concerns/ability.rb +9 -12
- data/lib/date_book/concerns/acts_as_calendar.rb +5 -6
- data/lib/date_book/concerns/acts_as_event.rb +30 -9
- data/lib/date_book/concerns/acts_as_event_occurrence.rb +21 -9
- data/lib/date_book/concerns/acts_as_ownable.rb +9 -3
- data/lib/date_book/concerns/acts_as_owner.rb +5 -6
- data/lib/date_book/concerns/acts_as_schedule.rb +14 -7
- data/lib/date_book/configuration.rb +14 -11
- data/lib/date_book/engine.rb +7 -5
- data/lib/date_book/version.rb +2 -0
- data/lib/generators/date_book/install/install_generator.rb +27 -29
- data/lib/generators/date_book/install/templates/app/models/calendar.rb +4 -1
- data/lib/generators/date_book/install/templates/app/models/event.rb +4 -1
- data/lib/generators/date_book/install/templates/app/models/event_occurrence.rb +4 -1
- data/lib/generators/date_book/install/templates/app/models/schedule.rb +4 -1
- data/spec/abilities/event_spec.rb +1 -1
- data/spec/controllers/date_book/calendars_controller_spec.rb +48 -20
- data/spec/controllers/date_book/events_controller_spec.rb +145 -39
- data/spec/dummy/app/models/calendar.rb +3 -1
- data/spec/dummy/app/models/event.rb +3 -1
- data/spec/dummy/app/models/event_occurrence.rb +3 -1
- data/spec/dummy/app/models/role.rb +7 -5
- data/spec/dummy/app/models/schedule.rb +3 -1
- data/spec/dummy/app/models/user.rb +3 -3
- data/spec/dummy/config/initializers/devise.rb +61 -40
- data/spec/dummy/config/initializers/high_voltage.rb +2 -0
- data/spec/dummy/config/initializers/rolify.rb +5 -2
- data/spec/dummy/config/routes.rb +6 -9
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20170728171103_create_users_table.rb +2 -0
- data/spec/dummy/db/migrate/20170807134122_add_devise_to_users.rb +4 -3
- data/spec/dummy/db/migrate/20170807134128_rolify_create_roles.rb +6 -4
- data/spec/dummy/db/migrate/{20170808150915_create_calendars.date_book.rb → 20170808200808_create_calendars.date_book.rb} +3 -0
- data/spec/dummy/db/migrate/{20170808150916_create_events.date_book.rb → 20170808200809_create_events.date_book.rb} +3 -0
- data/spec/dummy/db/migrate/{20170808150917_create_schedules.date_book.rb → 20170808200810_create_schedules.date_book.rb} +9 -6
- data/spec/dummy/db/migrate/{20170808150918_add_fields_to_schedule.date_book.rb → 20170808200811_add_fields_to_schedule.date_book.rb} +3 -0
- data/spec/dummy/db/migrate/{20170808150919_create_event_occurrences.date_book.rb → 20170808200812_create_event_occurrences.date_book.rb} +4 -3
- data/spec/dummy/db/migrate/{20170808150920_add_fields_to_event_occurrences.date_book.rb → 20170808200813_add_fields_to_event_occurrences.date_book.rb} +3 -0
- data/spec/dummy/db/schema.rb +1 -1
- data/spec/dummy/db/seeds/calendars.seeds.rb +2 -1
- data/spec/dummy/db/seeds/events.seeds.rb +5 -5
- data/spec/dummy/db/seeds/users.seeds.rb +3 -1
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/lib/basic_benchmark.rb +2 -0
- data/spec/factories/calendars.rb +2 -0
- data/spec/factories/events.rb +2 -0
- data/spec/factories/roles.rb +2 -1
- data/spec/factories/users.rb +2 -0
- data/spec/features/calendars_spec.rb +47 -5
- data/spec/features/events_spec.rb +35 -9
- data/spec/helpers/date_book/application_helper_spec.rb +32 -0
- data/spec/helpers/date_book/events_helper_spec.rb +181 -13
- data/spec/models/calendar_spec.rb +3 -1
- data/spec/models/event_spec.rb +3 -1
- data/spec/models/role_spec.rb +1 -0
- data/spec/rails_helper.rb +6 -1
- data/spec/requests/date_book/api_spec.rb +76 -0
- data/spec/routing/date_book/calendars_routing_spec.rb +4 -2
- data/spec/routing/date_book/events_routing_spec.rb +48 -11
- data/spec/support/controller_behaviors.rb +2 -0
- data/spec/support/controller_macros.rb +3 -1
- data/spec/support/factory_girl.rb +2 -0
- data/spec/support/feature_behaviors.rb +9 -9
- data/spec/support/loaded_site.rb +2 -0
- data/spec/support/loaded_site/calendars.rb +2 -0
- data/spec/support/loaded_site/events.rb +3 -1
- data/spec/support/loaded_site/users.rb +2 -0
- data/spec/support/request_behaviors.rb +12 -63
- data/spec/support/shared_connection.rb +2 -0
- data/spec/support/utilities.rb +6 -5
- metadata +79 -42
- data/app/graphql/types/profile_type.rb +0 -7
- data/app/helpers/date_book/calendar_helper.rb +0 -4
- data/app/views/date_book/application/_all_day_checkbox.html.haml +0 -1
- data/bin/rails +0 -15
- data/spec/helpers/date_book/calendar_helper_spec.rb +0 -17
- data/spec/requests/date_book/events_spec.rb +0 -56
@@ -1,4 +1,7 @@
|
|
1
1
|
# This migration comes from date_book (originally 20170807133850)
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
# Migration to add our fields to event_occurrences
|
2
5
|
class AddFieldsToEventOccurrences < ActiveRecord::Migration[5.1]
|
3
6
|
def change
|
4
7
|
add_column :event_occurrences, :end_date, :datetime
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 20170808200813) do
|
14
14
|
|
15
15
|
create_table "calendars", force: :cascade do |t|
|
16
16
|
t.string "name"
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
after :users, :calendars do
|
2
4
|
BasicBenchmark.new "Seeding #{Rails.env} Events" do
|
3
5
|
FactoryGirl.create(
|
@@ -8,7 +10,7 @@ after :users, :calendars do
|
|
8
10
|
calendar: Calendar.friendly.find('other-calendar'),
|
9
11
|
schedule_attributes: {
|
10
12
|
rule: 'weekly',
|
11
|
-
day: %w
|
13
|
+
day: %w[monday],
|
12
14
|
time: '00:00',
|
13
15
|
duration: 1.day,
|
14
16
|
all_day: true
|
@@ -21,7 +23,7 @@ after :users, :calendars do
|
|
21
23
|
css_class: 'week',
|
22
24
|
schedule_attributes: {
|
23
25
|
rule: 'weekly',
|
24
|
-
day: %w
|
26
|
+
day: %w[monday],
|
25
27
|
time: '00:00',
|
26
28
|
duration: 5.days,
|
27
29
|
all_day: true
|
@@ -77,13 +79,11 @@ after :users, :calendars do
|
|
77
79
|
calendar: Calendar.friendly.find('regular-calendar'),
|
78
80
|
schedule_attributes: {
|
79
81
|
rule: 'monthly',
|
80
|
-
day_of_week: { tuesday: [
|
82
|
+
day_of_week: { tuesday: ['1'] },
|
81
83
|
time: '5:00 PM',
|
82
84
|
interval: 1,
|
83
85
|
duration: 1.hour
|
84
86
|
}
|
85
87
|
)
|
86
|
-
|
87
88
|
end
|
88
89
|
end
|
89
|
-
|
Binary file
|
data/spec/factories/calendars.rb
CHANGED
data/spec/factories/events.rb
CHANGED
data/spec/factories/roles.rb
CHANGED
data/spec/factories/users.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails_helper'
|
2
4
|
|
3
5
|
RSpec.feature 'Calendars', folder: :features do
|
4
6
|
include_context 'loaded site'
|
5
7
|
|
6
8
|
include ActionView::Helpers::TextHelper
|
7
|
-
let(:paragraphs) { %w
|
9
|
+
let(:paragraphs) { %w[first second] }
|
8
10
|
let!(:id) { regular_calendar.id }
|
9
11
|
|
10
12
|
describe 'Browsing Calendars' do
|
@@ -22,7 +24,11 @@ RSpec.feature 'Calendars', folder: :features do
|
|
22
24
|
before do
|
23
25
|
visit '/date_book/calendars/regular-calendar'
|
24
26
|
end
|
25
|
-
it_behaves_like
|
27
|
+
it_behaves_like(
|
28
|
+
'a bootstrap page showing an item',
|
29
|
+
Calendar,
|
30
|
+
'Regular Calendar'
|
31
|
+
)
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
@@ -64,12 +70,20 @@ RSpec.feature 'Calendars', folder: :features do
|
|
64
70
|
end
|
65
71
|
describe 'permits adding a valid Calendar', js: true do
|
66
72
|
before do
|
73
|
+
# Make travis wait
|
74
|
+
wait_until do
|
75
|
+
page.has_field? 'Name'
|
76
|
+
end
|
67
77
|
fill_in 'Name', with: 'Calendar Name Here'
|
68
78
|
fill_in_wysiwyg(
|
69
79
|
'Description',
|
70
80
|
simple_format(paragraphs.join("\n\n"))
|
71
81
|
)
|
72
82
|
click_button 'Save Calendar'
|
83
|
+
# Make travis wait
|
84
|
+
wait_until do
|
85
|
+
page.has_css? 'h1', text: 'Calendar Name Here'
|
86
|
+
end
|
73
87
|
end
|
74
88
|
it_behaves_like(
|
75
89
|
'a bootstrap page with an alert',
|
@@ -110,8 +124,16 @@ RSpec.feature 'Calendars', folder: :features do
|
|
110
124
|
end
|
111
125
|
describe 'validates editing a Calendar' do
|
112
126
|
before do
|
127
|
+
# Make travis wait
|
128
|
+
wait_until do
|
129
|
+
page.has_field? 'Name'
|
130
|
+
end
|
113
131
|
fill_in 'Name', with: ''
|
114
132
|
click_button 'Save Calendar'
|
133
|
+
# Make travis wait
|
134
|
+
wait_until do
|
135
|
+
page.has_css? 'h1', text: 'Editing Regular Calendar'
|
136
|
+
end
|
115
137
|
end
|
116
138
|
it_behaves_like(
|
117
139
|
'a bootstrap page with an alert',
|
@@ -124,12 +146,20 @@ RSpec.feature 'Calendars', folder: :features do
|
|
124
146
|
end
|
125
147
|
describe 'permits editing a valid Calendar' do
|
126
148
|
before do
|
149
|
+
# Make travis wait
|
150
|
+
wait_until do
|
151
|
+
page.has_field? 'Name'
|
152
|
+
end
|
127
153
|
fill_in 'Name', with: 'Calendar Name Here'
|
128
154
|
fill_in_wysiwyg(
|
129
155
|
'Description',
|
130
156
|
simple_format(paragraphs.join("\n\n"))
|
131
157
|
)
|
132
158
|
click_button 'Save Calendar'
|
159
|
+
# Make travis wait
|
160
|
+
wait_until do
|
161
|
+
page.has_css? 'h1', text: 'Calendar Name Here'
|
162
|
+
end
|
133
163
|
end
|
134
164
|
it_behaves_like(
|
135
165
|
'a bootstrap page with an alert',
|
@@ -152,7 +182,11 @@ RSpec.feature 'Calendars', folder: :features do
|
|
152
182
|
describe 'when not logged in' do
|
153
183
|
before do
|
154
184
|
# While we're not logged in:
|
155
|
-
page.driver.submit
|
185
|
+
page.driver.submit(
|
186
|
+
:delete,
|
187
|
+
'/date_book/calendars/regular-calendar',
|
188
|
+
{}
|
189
|
+
)
|
156
190
|
end
|
157
191
|
it_behaves_like 'an authentication error'
|
158
192
|
end
|
@@ -160,14 +194,22 @@ RSpec.feature 'Calendars', folder: :features do
|
|
160
194
|
describe 'and not authorized' do
|
161
195
|
before do
|
162
196
|
login_as other_user
|
163
|
-
page.driver.submit
|
197
|
+
page.driver.submit(
|
198
|
+
:delete,
|
199
|
+
'/date_book/calendars/regular-calendar',
|
200
|
+
{}
|
201
|
+
)
|
164
202
|
end
|
165
203
|
it_behaves_like 'an authorization error'
|
166
204
|
end
|
167
205
|
describe 'and authorized' do
|
168
206
|
before do
|
169
207
|
login_as regular_user
|
170
|
-
page.driver.submit
|
208
|
+
page.driver.submit(
|
209
|
+
:delete,
|
210
|
+
'/date_book/calendars/regular-calendar',
|
211
|
+
{}
|
212
|
+
)
|
171
213
|
end
|
172
214
|
it_behaves_like 'a bootstrap page', title: 'Calendars'
|
173
215
|
it_behaves_like(
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails_helper'
|
2
4
|
|
3
5
|
RSpec.feature 'Events', folder: :features do
|
4
6
|
include_context 'loaded site'
|
5
7
|
|
6
8
|
include ActionView::Helpers::TextHelper
|
7
|
-
let(:paragraphs) { %w
|
8
|
-
let!(:club_id) {
|
9
|
+
let(:paragraphs) { %w[first second] }
|
10
|
+
let!(:club_id) { science_fiction_club.id }
|
9
11
|
|
10
12
|
describe 'Browsing Events' do
|
11
13
|
describe 'at /date_book/calendars/admin-calendar/events' do
|
@@ -100,7 +102,10 @@ RSpec.feature 'Events', folder: :features do
|
|
100
102
|
describe 'when not logged in' do
|
101
103
|
before do
|
102
104
|
# While we're not logged in:
|
103
|
-
visit
|
105
|
+
visit(
|
106
|
+
'/date_book/calendars/regular-calendar/events/'\
|
107
|
+
'science-fiction-club/edit'
|
108
|
+
)
|
104
109
|
end
|
105
110
|
it_behaves_like 'an authentication error'
|
106
111
|
end
|
@@ -108,16 +113,25 @@ RSpec.feature 'Events', folder: :features do
|
|
108
113
|
describe 'and not authorized' do
|
109
114
|
before do
|
110
115
|
login_as other_user
|
111
|
-
visit
|
116
|
+
visit(
|
117
|
+
'/date_book/calendars/regular-calendar/events/'\
|
118
|
+
'science-fiction-club/edit'
|
119
|
+
)
|
112
120
|
end
|
113
121
|
it_behaves_like 'an authorization error'
|
114
122
|
end
|
115
123
|
describe 'and authorized' do
|
116
124
|
before do
|
117
125
|
login_as regular_user
|
118
|
-
visit
|
126
|
+
visit(
|
127
|
+
'/date_book/calendars/regular-calendar/events/'\
|
128
|
+
'science-fiction-club/edit'
|
129
|
+
)
|
119
130
|
end
|
120
|
-
it_behaves_like
|
131
|
+
it_behaves_like(
|
132
|
+
'a bootstrap page',
|
133
|
+
title: 'Editing Science Fiction Club'
|
134
|
+
)
|
121
135
|
describe 'displays a form to edit the Event' do
|
122
136
|
subject { page }
|
123
137
|
it { should have_css("form#edit_event_#{club_id}") }
|
@@ -168,7 +182,11 @@ RSpec.feature 'Events', folder: :features do
|
|
168
182
|
describe 'when not logged in' do
|
169
183
|
before do
|
170
184
|
# While we're not logged in:
|
171
|
-
page.driver.submit
|
185
|
+
page.driver.submit(
|
186
|
+
:delete,
|
187
|
+
'/date_book/calendars/regular-calendar/events/science-fiction-club',
|
188
|
+
{}
|
189
|
+
)
|
172
190
|
end
|
173
191
|
it_behaves_like 'an authentication error'
|
174
192
|
end
|
@@ -176,14 +194,22 @@ RSpec.feature 'Events', folder: :features do
|
|
176
194
|
describe 'and not authorized' do
|
177
195
|
before do
|
178
196
|
login_as other_user
|
179
|
-
page.driver.submit
|
197
|
+
page.driver.submit(
|
198
|
+
:delete,
|
199
|
+
'/date_book/calendars/regular-calendar/events/science-fiction-club',
|
200
|
+
{}
|
201
|
+
)
|
180
202
|
end
|
181
203
|
it_behaves_like 'an authorization error'
|
182
204
|
end
|
183
205
|
describe 'and authorized' do
|
184
206
|
before do
|
185
207
|
login_as regular_user
|
186
|
-
page.driver.submit
|
208
|
+
page.driver.submit(
|
209
|
+
:delete,
|
210
|
+
'/date_book/calendars/regular-calendar/events/science-fiction-club',
|
211
|
+
{}
|
212
|
+
)
|
187
213
|
end
|
188
214
|
it_behaves_like 'a bootstrap page', title: 'Events'
|
189
215
|
it_behaves_like(
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
describe DateBook::ApplicationHelper, folder: :helpers do
|
6
|
+
include_context 'loaded site'
|
7
|
+
|
8
|
+
describe '#date_book_scripts' do
|
9
|
+
subject { helper.date_book_scripts }
|
10
|
+
it { should have_tag('script') }
|
11
|
+
it { should have_tag('link') }
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#date_book_date_range' do
|
15
|
+
let(:start_date) { Time.parse('2017-07-04 10:00 AM') }
|
16
|
+
let(:end_date) { Time.parse('2017-07-05 10:00 AM') }
|
17
|
+
subject { helper.date_book_date_range(start_date, end_date, false, 1.day) }
|
18
|
+
it { should eq "2017-07-04 10:00 am\n—\n2017-07-05 10:00 am\n" }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#date_book_date' do
|
22
|
+
let(:date) { Time.parse('2017-07-04 10:00 AM') }
|
23
|
+
subject { helper.date_book_date(date, false) }
|
24
|
+
it { should eq '2017-07-04 10:00 am' }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#date_book_time' do
|
28
|
+
let(:time) { Time.parse('10:00 AM') }
|
29
|
+
subject { helper.date_book_time(time) }
|
30
|
+
it { should eq '10:00 am' }
|
31
|
+
end
|
32
|
+
end
|
@@ -1,17 +1,185 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails_helper'
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
5
|
+
describe DateBook::EventsHelper, folder: :helpers do
|
6
|
+
helper BootstrapForm::Helpers::Bootstrap
|
7
|
+
helper BootstrapLeather::ApplicationHelper
|
8
|
+
helper DateBook::ApplicationHelper
|
9
|
+
|
10
|
+
include_context 'loaded site'
|
11
|
+
|
12
|
+
let(:form_section) do
|
13
|
+
form_section = nil
|
14
|
+
object = [monday_event.calendar, monday_event]
|
15
|
+
|
16
|
+
helper.bootstrap_form_for object do |f|
|
17
|
+
f.fields_for :schedule do |g|
|
18
|
+
form_section = g
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
form_section
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#date_book_event_occurrence_dates' do
|
26
|
+
let(:rendered) { helper.date_book_event_occurrence_dates(monday_event) }
|
27
|
+
it 'displays dates in a dl' do
|
28
|
+
expect(rendered).to have_tag('dl') do
|
29
|
+
with_tag 'dt' do
|
30
|
+
with_text 'Next Occurrence'
|
31
|
+
end
|
32
|
+
with_tag 'dd' do
|
33
|
+
with_tag 'a', with: { href: monday_event.event_occurrences.first.url }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#date_book_rule_form_section' do
|
40
|
+
let(:rendered) do
|
41
|
+
helper.date_book_rule_form_section('singular', form_section)
|
42
|
+
end
|
43
|
+
it 'contains a date field' do
|
44
|
+
expect(rendered).to have_tag(
|
45
|
+
'div',
|
46
|
+
with: { class: 'form-group date-book--date' }
|
47
|
+
) do
|
48
|
+
with_tag 'label', with: { for: 'event_schedule_attributes_date' }
|
49
|
+
with_tag 'div', with: { class: 'input-group' } do
|
50
|
+
with_tag 'span', with: { class: 'glyphicon-calendar' }
|
51
|
+
with_tag 'input', with: { id: 'event_schedule_attributes_date' }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
it 'contains a time field' do
|
56
|
+
expect(rendered).to have_tag(
|
57
|
+
'div',
|
58
|
+
with: { class: 'form-group date-book--time' }
|
59
|
+
) do
|
60
|
+
with_tag 'label', with: { for: 'event_schedule_attributes_time' }
|
61
|
+
with_tag 'div', with: { class: 'input-group' } do
|
62
|
+
with_tag 'span', with: { class: 'glyphicon-time' }
|
63
|
+
with_tag 'input', with: { id: 'event_schedule_attributes_time' }
|
64
|
+
with_tag 'input', with: { id: 'event_schedule_attributes_all_day' }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
it 'contains a duration field' do
|
69
|
+
expect(rendered).to have_tag(
|
70
|
+
'div',
|
71
|
+
with: { class: 'form-group date-book--duration' }
|
72
|
+
) do
|
73
|
+
with_tag 'label', with: { for: 'event_schedule_attributes_duration' }
|
74
|
+
with_tag 'div', with: { class: 'input-group' } do
|
75
|
+
with_tag 'input', with: {
|
76
|
+
id: 'event_schedule_attributes_duration_attributes_count'
|
77
|
+
}
|
78
|
+
with_tag 'select', with: {
|
79
|
+
id: 'event_schedule_attributes_duration_attributes_unit'
|
80
|
+
}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#date_book_date_field' do
|
87
|
+
let(:rendered) { helper.date_book_date_field(form_section) }
|
88
|
+
it 'shows the date field' do
|
89
|
+
expect(rendered).to have_tag(
|
90
|
+
'div',
|
91
|
+
with: { class: 'form-group date-book--date' }
|
92
|
+
) do
|
93
|
+
with_tag 'label', with: { for: 'event_schedule_attributes_date' }
|
94
|
+
with_tag 'div', with: { class: 'input-group' } do
|
95
|
+
with_tag 'span', with: { class: 'glyphicon-calendar' }
|
96
|
+
with_tag 'input', with: { id: 'event_schedule_attributes_date' }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe '#date_book_time_field' do
|
103
|
+
let(:rendered) { helper.date_book_time_field(form_section) }
|
104
|
+
it 'shows the time field' do
|
105
|
+
expect(rendered).to have_tag(
|
106
|
+
'div',
|
107
|
+
with: { class: 'form-group date-book--time' }
|
108
|
+
) do
|
109
|
+
with_tag 'label', with: { for: 'event_schedule_attributes_time' }
|
110
|
+
with_tag 'div', with: { class: 'input-group' } do
|
111
|
+
with_tag 'span', with: { class: 'glyphicon-time' }
|
112
|
+
with_tag 'input', with: { id: 'event_schedule_attributes_time' }
|
113
|
+
with_tag 'input', with: { id: 'event_schedule_attributes_all_day' }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '#date_book_duration_field' do
|
120
|
+
let(:rendered) { helper.date_book_duration_field(form_section) }
|
121
|
+
it 'shows the duration field' do
|
122
|
+
expect(rendered).to have_tag(
|
123
|
+
'div',
|
124
|
+
with: { class: 'form-group date-book--duration' }
|
125
|
+
) do
|
126
|
+
with_tag 'label', with: { for: 'event_schedule_attributes_duration' }
|
127
|
+
with_tag 'div', with: { class: 'input-group' } do
|
128
|
+
with_tag 'input', with: {
|
129
|
+
id: 'event_schedule_attributes_duration_attributes_count'
|
130
|
+
}
|
131
|
+
with_tag 'select', with: {
|
132
|
+
id: 'event_schedule_attributes_duration_attributes_unit'
|
133
|
+
}
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe '#date_book_interval_field' do
|
140
|
+
let(:rendered) { helper.date_book_interval_field('hours', form_section) }
|
141
|
+
it 'shows the interval field' do
|
142
|
+
expect(rendered).to have_tag('div', with: { class: 'form-group' }) do
|
143
|
+
with_tag 'label', with: { for: 'event_schedule_attributes_interval' }
|
144
|
+
with_tag 'input', with: { id: 'event_schedule_attributes_interval' }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe '#date_book_day_field' do
|
150
|
+
let(:rendered) { helper.date_book_day_field(form_section) }
|
151
|
+
it 'shows a hidden field to catch destruction of all checks' do
|
152
|
+
expect(rendered).to have_tag(
|
153
|
+
'input',
|
154
|
+
with: {
|
155
|
+
type: 'hidden',
|
156
|
+
id: 'event_schedule_attributes_day'
|
157
|
+
}
|
158
|
+
)
|
159
|
+
end
|
160
|
+
it 'shows the actual checkboxes' do
|
161
|
+
expect(rendered).to have_tag(
|
162
|
+
'div',
|
163
|
+
with: { class: 'form-group date-book--day' }
|
164
|
+
) do
|
165
|
+
with_tag 'label', minimum: 7 do
|
166
|
+
with_tag 'input', with: { type: 'checkbox' }
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe '#date_book_day_of_week_field' do
|
173
|
+
let(:rendered) { helper.date_book_day_of_week_field(form_section) }
|
174
|
+
it 'shows the day of week field' do
|
175
|
+
expect(rendered).to have_tag(
|
176
|
+
'div',
|
177
|
+
with: { class: 'form-group date-book--day-of-week' }
|
178
|
+
) do
|
179
|
+
with_tag 'td', count: 35 do
|
180
|
+
with_tag 'input', with: { type: 'checkbox' }
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
16
184
|
end
|
17
185
|
end
|