date_book 0.0.6 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|