Merge branch 'master' into depfu/update/rails-assets-to-markdown-5.0.1

This commit is contained in:
Natnael Getahun 2022-05-13 15:22:44 +02:00 committed by GitHub
commit 1f1c3bc77c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
94 changed files with 661 additions and 695 deletions

View file

@ -26,7 +26,7 @@ jobs:
echo "BUNDLE_CACHE_PATH=vendor/cache.next" >> $GITHUB_ENV echo "BUNDLE_CACHE_PATH=vendor/cache.next" >> $GITHUB_ENV
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1
with: with:
ruby-version: 3.1.0 ruby-version: 3.1.2
bundler-cache: true bundler-cache: true
- name: Prepare spec - name: Prepare spec
run: | run: |

View file

@ -16,7 +16,7 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1
with: with:
ruby-version: 3.1.0 ruby-version: 3.1.2
bundler-cache: true bundler-cache: true
- run: bundle exec rubocop - run: bundle exec rubocop
- run: bundle exec haml-lint app/views - run: bundle exec haml-lint app/views
@ -34,7 +34,7 @@ jobs:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1
with: with:
ruby-version: 3.1.0 ruby-version: 3.1.2
bundler-cache: true bundler-cache: true
- name: Prepare spec - name: Prepare spec
run: | run: |

View file

@ -426,7 +426,7 @@ Lint/UriRegexp:
# Offense count: 127 # Offense count: 127
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes. # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
Metrics/AbcSize: Metrics/AbcSize:
Max: 71 Max: 72
# Offense count: 313 # Offense count: 313
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods. # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
@ -457,7 +457,7 @@ Metrics/MethodLength:
# Offense count: 5 # Offense count: 5
# Configuration parameters: CountComments, CountAsOne. # Configuration parameters: CountComments, CountAsOne.
Metrics/ModuleLength: Metrics/ModuleLength:
Max: 173 Max: 174
# Offense count: 26 # Offense count: 26
# Configuration parameters: IgnoredMethods. # Configuration parameters: IgnoredMethods.

View file

@ -1 +1 @@
3.1.0 3.1.2

View file

@ -1,6 +1,5 @@
FROM registry.opensuse.org/opensuse/infrastructure/dale/containers/osem/base:latest FROM registry.opensuse.org/opensuse/infrastructure/dale/containers/osem/base:latest
ARG CONTAINER_USERID ARG CONTAINER_USERID
ENV NOKOGIRI_USE_SYSTEM_LIBRARIES=1
# Configure our user # Configure our user
RUN usermod -u $CONTAINER_USERID osem RUN usermod -u $CONTAINER_USERID osem
@ -14,8 +13,8 @@ COPY Gemfile.lock /osem/
RUN chown -R osem /osem RUN chown -R osem /osem
# Install bundler & foreman # Install bundler & foreman
RUN gem.ruby3.1 install bundler -v "$(grep -A 1 "BUNDLED WITH" /osem/Gemfile.lock | tail -n 1)"; \ RUN gem install bundler -v "$(grep -A 1 "BUNDLED WITH" /osem/Gemfile.lock | tail -n 1)"; \
gem.ruby3.1 install foreman gem install foreman
# Continue as user # Continue as user
USER osem USER osem

View file

@ -1,20 +1,22 @@
FROM registry.opensuse.org/opensuse/infrastructure/dale/containers/osem/base:latest FROM registry.opensuse.org/opensuse/infrastructure/dale/containers/osem/base:latest
# Install bundler & foreman ENV RAILS_ENV=production
RUN gem install bundler:1.17.3 foreman
# Add our files # Add our files
COPY --chown=1000:1000 . /osem/ COPY --chown=1000:1000 . /osem/
# Install bundler & foreman
RUN gem install bundler -v "$(grep -A 1 "BUNDLED WITH" /osem/Gemfile.lock | tail -n 1)"; \
gem install foreman
USER osem USER osem
WORKDIR /osem/ WORKDIR /osem/
# Install our bundle # Install our bundle
RUN export NOKOGIRI_USE_SYSTEM_LIBRARIES=1; bundle install --jobs=3 --retry=3 --without test development RUN bundle config set --local without 'test development'
RUN bundle install --jobs=3 --retry=3
# Generate assets # Generate assets
RUN export RAILS_ENV=production; bundle exec rake assets:precompile RUN bundle exec rake assets:precompile
ENV RAILS_ENV=production
CMD ["foreman", "start"] CMD ["foreman", "start"]

10
Gemfile
View file

@ -5,7 +5,7 @@ end
source 'https://rubygems.org' source 'https://rubygems.org'
ruby ENV['OSEM_RUBY_VERSION'] || '3.1.0' ruby ENV.fetch('OSEM_RUBY_VERSION', '3.1.2')
# rails-assets requires >= 1.8.4 # rails-assets requires >= 1.8.4
if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4') if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4')
@ -20,7 +20,7 @@ else
end end
# Use Puma as the app server # Use Puma as the app server
gem 'puma', '~> 4.3' gem 'puma'
# respond_to methods have been extracted to the responders gem # respond_to methods have been extracted to the responders gem
# http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#responders # http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#responders
@ -145,6 +145,10 @@ gem 'prawn-rails'
# see https://github.com/prawnpdf/prawn/commit/3658d5125c3b20eb11484c3b039ca6b89dc7d1b7 # see https://github.com/prawnpdf/prawn/commit/3658d5125c3b20eb11484c3b039ca6b89dc7d1b7
gem 'matrix', '~> 0.4' gem 'matrix', '~> 0.4'
# FIXME: for selenium-webdriver, rexml isn't in the default set of Ruby 3.1 anymore
# see https://github.com/SeleniumHQ/selenium/commit/526fd9d0de60a53746ffa982feab985fed09a278
gem 'rexml'
# for QR code generation # for QR code generation
gem 'rqrcode' gem 'rqrcode'
@ -180,7 +184,7 @@ gem 'money-rails'
gem 'acts_as_list' gem 'acts_as_list'
# for switch checkboxes # for switch checkboxes
gem 'bootstrap-switch-rails', '~> 3.3.5' gem 'bootstrap-switch-rails', '3.3.3' # Locked pending Bttstrp/bootstrap-switch#707
# for parsing OEmbed data # for parsing OEmbed data
gem 'ruby-oembed' gem 'ruby-oembed'

View file

@ -14,7 +14,7 @@ GEM
rails-assets-jquery-smooth-scroll (2.2.0) rails-assets-jquery-smooth-scroll (2.2.0)
rails-assets-jquery (>= 1.7.0) rails-assets-jquery (>= 1.7.0)
rails-assets-markdown (0.5.0) rails-assets-markdown (0.5.0)
rails-assets-momentjs (2.22.2) rails-assets-momentjs (2.29.3)
rails-assets-spectrum (1.8.0) rails-assets-spectrum (1.8.0)
rails-assets-jquery (>= 1.7.2) rails-assets-jquery (>= 1.7.2)
rails-assets-tinycolor (1.4.1) rails-assets-tinycolor (1.4.1)
@ -110,24 +110,25 @@ GEM
archive-zip (0.12.0) archive-zip (0.12.0)
io-like (~> 0.3.0) io-like (~> 0.3.0)
ast (2.4.2) ast (2.4.2)
autoprefixer-rails (10.3.1.0) autoprefixer-rails (10.4.7.0)
execjs (~> 2) execjs (~> 2)
awesome_nested_set (3.5.0) awesome_nested_set (3.5.0)
activerecord (>= 4.0.0, < 7.1) activerecord (>= 4.0.0, < 7.1)
aws_cf_signer (0.1.3) aws_cf_signer (0.1.3)
bcrypt (3.1.16) bcrypt (3.1.17)
bindex (0.8.1) bindex (0.8.1)
bootstrap-sass (3.4.1) bootstrap-sass (3.4.1)
autoprefixer-rails (>= 5.2.1) autoprefixer-rails (>= 5.2.1)
sassc (>= 2.0.0) sassc (>= 2.0.0)
bootstrap-switch-rails (3.3.5) bootstrap-switch-rails (3.3.3)
bootstrap3-datetimepicker-rails (4.17.47) bootstrap3-datetimepicker-rails (4.17.47)
momentjs-rails (>= 2.8.1) momentjs-rails (>= 2.8.1)
builder (3.2.4) builder (3.2.4)
byebug (11.1.3) byebug (11.1.3)
cancancan (3.3.0) cancancan (3.3.0)
capybara (3.35.3) capybara (3.36.0)
addressable addressable
matrix
mini_mime (>= 0.1.3) mini_mime (>= 0.1.3)
nokogiri (~> 1.8) nokogiri (~> 1.8)
rack (>= 1.6.0) rack (>= 1.6.0)
@ -148,32 +149,32 @@ GEM
fastimage fastimage
case_transform (0.2) case_transform (0.2)
activesupport activesupport
caxlsx (3.1.0) caxlsx (3.2.0)
htmlentities (~> 4.3, >= 4.3.4) htmlentities (~> 4.3, >= 4.3.4)
marcel (~> 1.0) marcel (~> 1.0)
nokogiri (~> 1.10, >= 1.10.4) nokogiri (~> 1.10, >= 1.10.4)
rubyzip (>= 1.3.0, < 3) rubyzip (>= 1.3.0, < 3)
caxlsx_rails (0.6.2) caxlsx_rails (0.6.3)
actionpack (>= 3.1) actionpack (>= 3.1)
caxlsx (>= 3.0) caxlsx (>= 3.0)
chartkick (4.1.3) chartkick (4.1.3)
childprocess (3.0.0) childprocess (4.1.0)
chronic (0.10.2) chronic (0.10.2)
chunky_png (1.4.0) chunky_png (1.4.0)
climate_control (1.0.1) climate_control (1.0.1)
cloudinary (1.20.0) cloudinary (1.23.0)
aws_cf_signer aws_cf_signer
rest-client (>= 2.0.0) rest-client (>= 2.0.0)
cocoon (1.2.15) cocoon (1.2.15)
colorize (0.8.1) colorize (0.8.1)
concurrent-ruby (1.1.9) concurrent-ruby (1.1.10)
countable-rails (0.0.1) countable-rails (0.0.1)
railties (>= 3.1) railties (>= 3.1)
countries (4.0.1) countries (4.2.2)
i18n_data (~> 0.13.0) i18n_data (~> 0.15.0)
sixarm_ruby_unaccent (~> 1.1) sixarm_ruby_unaccent (~> 1.1)
country_select (6.0.0) country_select (6.1.1)
countries (~> 4.0) countries (~> 4.2)
sort_alphabetical (~> 1.1) sort_alphabetical (~> 1.1)
crack (0.4.5) crack (0.4.5)
rexml rexml
@ -200,7 +201,7 @@ GEM
warden (~> 1.2.3) warden (~> 1.2.3)
devise_ichain_authenticatable (0.3.2) devise_ichain_authenticatable (0.3.2)
devise (>= 2.2) devise (>= 2.2)
diff-lcs (1.4.4) diff-lcs (1.5.0)
digest (3.1.0) digest (3.1.0)
docile (1.4.0) docile (1.4.0)
domain_name (0.5.20190701) domain_name (0.5.20190701)
@ -212,35 +213,20 @@ GEM
erubi (1.10.0) erubi (1.10.0)
erubis (2.7.0) erubis (2.7.0)
execjs (2.8.1) execjs (2.8.1)
factory_bot (6.2.0) factory_bot (6.2.1)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
factory_bot_rails (6.2.0) factory_bot_rails (6.2.0)
factory_bot (~> 6.2.0) factory_bot (~> 6.2.0)
railties (>= 5.0.0) railties (>= 5.0.0)
faker (2.18.0) faker (2.20.0)
i18n (>= 1.6, < 2) i18n (>= 1.8.11, < 2)
faraday (1.7.0) faraday (2.3.0)
faraday-em_http (~> 1.0) faraday-net_http (~> 2.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
ruby2_keywords (>= 0.0.4) ruby2_keywords (>= 0.0.4)
faraday-em_http (1.0.0) faraday-net_http (2.0.2)
faraday-em_synchrony (1.0.0) fastimage (2.2.6)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
fastimage (2.2.5)
feature (1.4.0) feature (1.4.0)
ffi (1.15.3) ffi (1.15.5)
font-awesome-rails (4.7.0.8) font-awesome-rails (4.7.0.8)
railties (>= 3.2, < 8.0) railties (>= 3.2, < 8.0)
geckodriver-helper (0.24.0) geckodriver-helper (0.24.0)
@ -265,7 +251,7 @@ GEM
sysexits (~> 1.1) sysexits (~> 1.1)
hashdiff (1.0.1) hashdiff (1.0.1)
hashery (2.1.2) hashery (2.1.2)
hashie (4.1.0) hashie (5.0.0)
html2haml (2.2.0) html2haml (2.2.0)
erubis (~> 2.7.0) erubis (~> 2.7.0)
haml (>= 4.0, < 6) haml (>= 4.0, < 6)
@ -275,17 +261,17 @@ GEM
http-accept (1.7.0) http-accept (1.7.0)
http-cookie (1.0.4) http-cookie (1.0.4)
domain_name (~> 0.5) domain_name (~> 0.5)
i18n (1.9.1) i18n (1.10.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
i18n_data (0.13.0) i18n_data (0.15.0)
simple_po_parser (~> 1.1)
icalendar (2.7.1) icalendar (2.7.1)
ice_cube (~> 0.16) ice_cube (~> 0.16)
ice_cube (0.16.3) ice_cube (0.16.4)
image_processing (1.12.1) image_processing (1.12.2)
mini_magick (>= 4.9.5, < 5) mini_magick (>= 4.9.5, < 5)
ruby-vips (>= 2.0.17, < 3) ruby-vips (>= 2.0.17, < 3)
io-like (0.3.1) io-like (0.3.1)
io-wait (0.2.1)
iso-639 (0.3.5) iso-639 (0.3.5)
jquery-datatables-rails (3.4.0) jquery-datatables-rails (3.4.0)
actionpack (>= 3.1) actionpack (>= 3.1)
@ -298,55 +284,54 @@ GEM
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
jquery-ui-rails (6.0.1) jquery-ui-rails (6.0.1)
railties (>= 3.2.16) railties (>= 3.2.16)
json (2.5.1) json (2.6.1)
json-schema (2.8.1) json-schema (2.8.1)
addressable (>= 2.4) addressable (>= 2.4)
jsonapi-renderer (0.2.2) jsonapi-renderer (0.2.2)
jwt (2.2.3) jwt (2.3.0)
launchy (2.5.0) launchy (2.5.0)
addressable (~> 2.7) addressable (~> 2.7)
leaflet-rails (1.7.0) leaflet-rails (1.7.0)
rails (>= 4.2.0) rails (>= 4.2.0)
letter_opener (1.7.0) letter_opener (1.8.1)
launchy (~> 2.2) launchy (>= 2.2, < 3)
letter_opener_web (2.0.0) letter_opener_web (2.0.0)
actionmailer (>= 5.2) actionmailer (>= 5.2)
letter_opener (~> 1.7) letter_opener (~> 1.7)
railties (>= 5.2) railties (>= 5.2)
rexml rexml
loofah (2.13.0) loofah (2.17.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.7.1) mail (2.7.1)
mini_mime (>= 0.1.1) mini_mime (>= 0.1.1)
marcel (1.0.1) marcel (1.0.2)
matrix (0.4.2) matrix (0.4.2)
method_source (1.0.0) method_source (1.0.0)
mime-types (3.3.1) mime-types (3.4.1)
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2021.0704) mime-types-data (3.2022.0105)
mina (1.2.4) mina (1.2.4)
open4 (~> 1.3.4) open4 (~> 1.3.4)
rake rake
mini_magick (4.11.0) mini_magick (4.11.0)
mini_mime (1.1.2) mini_mime (1.1.2)
mini_portile2 (2.7.1) mini_portile2 (2.8.0)
minitest (5.15.0) minitest (5.15.0)
momentjs-rails (2.20.1) momentjs-rails (2.29.1.1)
railties (>= 3.1) railties (>= 3.1)
monetize (1.9.4) monetize (1.12.0)
money (~> 6.12) money (~> 6.12)
money (6.13.8) money (6.16.0)
i18n (>= 0.6.4, <= 2) i18n (>= 0.6.4, <= 2)
money-rails (1.14.0) money-rails (1.15.0)
activesupport (>= 3.0) activesupport (>= 3.0)
monetize (~> 1.9.0) monetize (~> 1.9)
money (~> 6.13.2) money (~> 6.13)
railties (>= 3.0) railties (>= 3.0)
multi_json (1.15.0) multi_json (1.15.0)
multi_xml (0.6.0) multi_xml (0.6.0)
multipart-post (2.1.1) mysql2 (0.5.4)
mysql2 (0.5.3)
net-imap (0.2.3) net-imap (0.2.3)
digest digest
net-protocol net-protocol
@ -355,67 +340,66 @@ GEM
digest digest
net-protocol net-protocol
timeout timeout
net-protocol (0.1.2) net-protocol (0.1.3)
io-wait
timeout timeout
net-smtp (0.3.1) net-smtp (0.3.1)
digest digest
net-protocol net-protocol
timeout timeout
netrc (0.11.0) netrc (0.11.0)
next_rails (1.0.4) next_rails (1.0.5)
colorize (>= 0.8.1) colorize (>= 0.8.1)
nio4r (2.5.8) nio4r (2.5.8)
nokogiri (1.13.1) nokogiri (1.13.6)
mini_portile2 (~> 2.7.0) mini_portile2 (~> 2.8.0)
racc (~> 1.4) racc (~> 1.4)
oauth2 (1.4.7) oauth2 (1.4.9)
faraday (>= 0.8, < 2.0) faraday (>= 0.17.3, < 3.0)
jwt (>= 1.0, < 3.0) jwt (>= 1.0, < 3.0)
multi_json (~> 1.3) multi_json (~> 1.3)
multi_xml (~> 0.5) multi_xml (~> 0.5)
rack (>= 1.2, < 3) rack (>= 1.2, < 3)
omniauth (2.0.4) omniauth (2.1.0)
hashie (>= 3.4.6) hashie (>= 3.4.6)
rack (>= 1.6.2, < 3) rack (>= 2.2.3)
rack-protection rack-protection
omniauth-facebook (8.0.0) omniauth-facebook (9.0.0)
omniauth-oauth2 (~> 1.2) omniauth-oauth2 (~> 1.2)
omniauth-github (2.0.0) omniauth-github (2.0.0)
omniauth (~> 2.0) omniauth (~> 2.0)
omniauth-oauth2 (~> 1.7.1) omniauth-oauth2 (~> 1.7.1)
omniauth-google-oauth2 (1.0.0) omniauth-google-oauth2 (1.0.1)
jwt (>= 2.0) jwt (>= 2.0)
oauth2 (~> 1.1) oauth2 (~> 1.1)
omniauth (~> 2.0) omniauth (~> 2.0)
omniauth-oauth2 (~> 1.7.1) omniauth-oauth2 (~> 1.7.1)
omniauth-oauth2 (1.7.1) omniauth-oauth2 (1.7.2)
oauth2 (~> 1.4) oauth2 (~> 1.4)
omniauth (>= 1.9, < 3) omniauth (>= 1.9, < 3)
omniauth-openid (2.0.1) omniauth-openid (2.0.1)
omniauth (>= 1.0, < 3.0) omniauth (>= 1.0, < 3.0)
rack-openid (~> 1.4.0) rack-openid (~> 1.4.0)
omniauth-rails_csrf_protection (1.0.0) omniauth-rails_csrf_protection (1.0.1)
actionpack (>= 4.2) actionpack (>= 4.2)
omniauth (~> 2.0) omniauth (~> 2.0)
open4 (1.3.4) open4 (1.3.4)
orm_adapter (0.5.0) orm_adapter (0.5.0)
paper_trail (12.2.0) paper_trail (12.3.0)
activerecord (>= 5.2) activerecord (>= 5.2)
request_store (~> 1.1) request_store (~> 1.1)
parallel (1.21.0) parallel (1.22.1)
parser (3.1.0.0) parser (3.1.2.0)
ast (~> 2.4.1) ast (~> 2.4.1)
pdf-core (0.9.0) pdf-core (0.9.0)
pdf-inspector (1.3.0) pdf-inspector (1.3.0)
pdf-reader (>= 1.0, < 3.0.a) pdf-reader (>= 1.0, < 3.0.a)
pdf-reader (2.5.0) pdf-reader (2.9.2)
Ascii85 (~> 1.0) Ascii85 (~> 1.0)
afm (~> 0.2.1) afm (~> 0.2.1)
hashery (~> 2.0) hashery (~> 2.0)
ruby-rc4 ruby-rc4
ttfunk ttfunk
pg (1.2.3) pg (1.3.5)
prawn (2.4.0) prawn (2.4.0)
pdf-core (~> 0.9.0) pdf-core (~> 0.9.0)
ttfunk (~> 1.7) ttfunk (~> 1.7)
@ -428,15 +412,15 @@ GEM
prawn-table prawn-table
prawn-table (0.2.2) prawn-table (0.2.2)
prawn (>= 1.3.0, < 3.0.0) prawn (>= 1.3.0, < 3.0.0)
public_suffix (4.0.6) public_suffix (4.0.7)
puma (4.3.8) puma (5.6.4)
nio4r (~> 2.0) nio4r (~> 2.0)
racc (1.6.0) racc (1.6.0)
rack (2.2.3) rack (2.2.3)
rack-openid (1.4.2) rack-openid (1.4.2)
rack (>= 1.1.0) rack (>= 1.1.0)
ruby-openid (>= 2.1.8) ruby-openid (>= 2.1.8)
rack-protection (2.1.0) rack-protection (2.2.0)
rack rack
rack-test (1.1.0) rack-test (1.1.0)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
@ -463,7 +447,7 @@ GEM
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.4.2) rails-html-sanitizer (1.4.2)
loofah (~> 2.3) loofah (~> 2.3)
rails-i18n (7.0.1) rails-i18n (7.0.3)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8) railties (>= 6.0.0, < 8)
railties (7.0.1) railties (7.0.1)
@ -475,10 +459,10 @@ GEM
zeitwerk (~> 2.5) zeitwerk (~> 2.5)
rainbow (3.1.1) rainbow (3.1.1)
rake (13.0.6) rake (13.0.6)
recaptcha (5.8.1) recaptcha (5.10.0)
json json
redcarpet (3.5.1) redcarpet (3.5.1)
regexp_parser (2.2.0) regexp_parser (2.4.0)
request_store (1.5.1) request_store (1.5.1)
rack (>= 1.4) rack (>= 1.4)
responders (3.0.1) responders (3.0.1)
@ -491,23 +475,23 @@ GEM
netrc (~> 0.8) netrc (~> 0.8)
rexml (3.2.5) rexml (3.2.5)
rolify (6.0.0) rolify (6.0.0)
rqrcode (2.0.0) rqrcode (2.1.1)
chunky_png (~> 1.0) chunky_png (~> 1.0)
rqrcode_core (~> 1.0) rqrcode_core (~> 1.0)
rqrcode_core (1.1.0) rqrcode_core (1.2.0)
rspec-activemodel-mocks (1.1.0) rspec-activemodel-mocks (1.1.0)
activemodel (>= 3.0) activemodel (>= 3.0)
activesupport (>= 3.0) activesupport (>= 3.0)
rspec-mocks (>= 2.99, < 4.0) rspec-mocks (>= 2.99, < 4.0)
rspec-core (3.10.1) rspec-core (3.11.0)
rspec-support (~> 3.10.0) rspec-support (~> 3.11.0)
rspec-expectations (3.10.1) rspec-expectations (3.11.0)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.10.0) rspec-support (~> 3.11.0)
rspec-mocks (3.10.2) rspec-mocks (3.11.1)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.10.0) rspec-support (~> 3.11.0)
rspec-rails (5.0.2) rspec-rails (5.1.2)
actionpack (>= 5.2) actionpack (>= 5.2)
activesupport (>= 5.2) activesupport (>= 5.2)
railties (>= 5.2) railties (>= 5.2)
@ -515,34 +499,33 @@ GEM
rspec-expectations (~> 3.10) rspec-expectations (~> 3.10)
rspec-mocks (~> 3.10) rspec-mocks (~> 3.10)
rspec-support (~> 3.10) rspec-support (~> 3.10)
rspec-support (3.10.2) rspec-support (3.11.0)
rubocop (1.25.1) rubocop (1.29.0)
parallel (~> 1.10) parallel (~> 1.10)
parser (>= 3.1.0.0) parser (>= 3.1.0.0)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0) regexp_parser (>= 1.8, < 3.0)
rexml rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.15.1, < 2.0) rubocop-ast (>= 1.17.0, < 2.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0) unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.15.1) rubocop-ast (1.17.0)
parser (>= 3.0.1.1) parser (>= 3.1.1.0)
rubocop-rails (2.11.3) rubocop-rails (2.14.2)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
rack (>= 1.1) rack (>= 1.1)
rubocop (>= 1.7.0, < 2.0) rubocop (>= 1.7.0, < 2.0)
rubocop-rspec (2.4.0) rubocop-rspec (2.10.0)
rubocop (~> 1.0) rubocop (~> 1.19)
rubocop-ast (>= 1.1.0)
ruby-oembed (0.15.0) ruby-oembed (0.15.0)
ruby-openid (2.9.2) ruby-openid (2.9.2)
ruby-progressbar (1.11.0) ruby-progressbar (1.11.0)
ruby-rc4 (0.1.5) ruby-rc4 (0.1.5)
ruby-vips (2.1.2) ruby-vips (2.1.4)
ffi (~> 1.12) ffi (~> 1.12)
ruby2_keywords (0.0.5) ruby2_keywords (0.0.5)
ruby_parser (3.17.0) ruby_parser (3.19.1)
sexp_processor (~> 4.15, >= 4.15.1) sexp_processor (~> 4.16)
rubyzip (2.3.2) rubyzip (2.3.2)
sass-rails (6.0.0) sass-rails (6.0.0)
sassc-rails (~> 2.1, >= 2.1.1) sassc-rails (~> 2.1, >= 2.1.1)
@ -555,8 +538,9 @@ GEM
sprockets-rails sprockets-rails
tilt tilt
selectize-rails (0.12.6) selectize-rails (0.12.6)
selenium-webdriver (3.142.7) selenium-webdriver (4.1.0)
childprocess (>= 0.5, < 4.0) childprocess (>= 0.5, < 5.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2) rubyzip (>= 1.2.2)
sentry-rails (4.6.5) sentry-rails (4.6.5)
railties (>= 5.0) railties (>= 5.0)
@ -564,32 +548,34 @@ GEM
sentry-ruby-core (4.6.5) sentry-ruby-core (4.6.5)
concurrent-ruby concurrent-ruby
faraday faraday
sexp_processor (4.15.3) sexp_processor (4.16.1)
shoulda-matchers (4.5.1) shoulda-matchers (4.5.1)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
simple_po_parser (1.1.6)
simplecov (0.21.2) simplecov (0.21.2)
docile (~> 1.1) docile (~> 1.1)
simplecov-html (~> 0.11) simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1) simplecov_json_formatter (~> 0.1)
simplecov-cobertura (1.4.2) simplecov-cobertura (2.1.0)
simplecov (~> 0.8) rexml
simplecov (~> 0.19)
simplecov-html (0.12.3) simplecov-html (0.12.3)
simplecov_json_formatter (0.1.3) simplecov_json_formatter (0.1.4)
sixarm_ruby_unaccent (1.2.0) sixarm_ruby_unaccent (1.2.0)
skylight (5.1.0) skylight (5.3.2)
activesupport (>= 5.2.0) activesupport (>= 5.2.0)
sort_alphabetical (1.1.0) sort_alphabetical (1.1.0)
unicode_utils (>= 1.2.2) unicode_utils (>= 1.2.2)
sprockets (4.0.2) sprockets (4.0.3)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
sprockets-rails (3.2.2) sprockets-rails (3.4.2)
actionpack (>= 4.0) actionpack (>= 5.2)
activesupport (>= 4.0) activesupport (>= 5.2)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
sqlite3 (1.4.2) sqlite3 (1.4.2)
ssrf_filter (1.0.7) ssrf_filter (1.0.7)
stripe (5.43.0) stripe (5.53.0)
stripe-ruby-mock (3.1.0.rc3) stripe-ruby-mock (3.1.0.rc3)
dante (>= 0.2.0) dante (>= 0.2.0)
multi_json (~> 1.0) multi_json (~> 1.0)
@ -599,9 +585,9 @@ GEM
temple (0.8.2) temple (0.8.2)
thor (1.2.1) thor (1.2.1)
tilt (2.0.10) tilt (2.0.10)
timecop (0.9.4) timecop (0.9.5)
timeout (0.2.0) timeout (0.2.0)
transitions (1.2.1) transitions (1.3.0)
ttfunk (1.7.0) ttfunk (1.7.0)
turbolinks (5.2.1) turbolinks (5.2.1)
turbolinks-source (~> 5.2) turbolinks-source (~> 5.2)
@ -612,7 +598,7 @@ GEM
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.7.7) unf_ext (0.0.8.1)
unicode-display_width (2.1.0) unicode-display_width (2.1.0)
unicode_utils (1.4.0) unicode_utils (1.4.0)
unobtrusive_flash (3.3.1) unobtrusive_flash (3.3.1)
@ -624,10 +610,10 @@ GEM
activemodel (>= 6.0.0) activemodel (>= 6.0.0)
bindex (>= 0.4.0) bindex (>= 0.4.0)
railties (>= 6.0.0) railties (>= 6.0.0)
webdrivers (4.6.0) webdrivers (5.0.0)
nokogiri (~> 1.6) nokogiri (~> 1.6)
rubyzip (>= 1.3.0) rubyzip (>= 1.3.0)
selenium-webdriver (>= 3.0, < 4.0) selenium-webdriver (~> 4.0)
webmock (3.14.0) webmock (3.14.0)
addressable (>= 2.8.0) addressable (>= 2.8.0)
crack (>= 0.3.2) crack (>= 0.3.2)
@ -652,7 +638,7 @@ DEPENDENCIES
autoprefixer-rails autoprefixer-rails
awesome_nested_set awesome_nested_set
bootstrap-sass (~> 3.4.0) bootstrap-sass (~> 3.4.0)
bootstrap-switch-rails (~> 3.3.5) bootstrap-switch-rails (= 3.3.3)
bootstrap3-datetimepicker-rails (~> 4.17.47) bootstrap3-datetimepicker-rails (~> 4.17.47)
byebug byebug
cancancan cancancan
@ -708,7 +694,7 @@ DEPENDENCIES
pg pg
prawn-qrcode prawn-qrcode
prawn-rails prawn-rails
puma (~> 4.3) puma
rails (~> 7.0) rails (~> 7.0)
rails-assets-bootstrap-markdown! rails-assets-bootstrap-markdown!
rails-assets-bootstrap-select! rails-assets-bootstrap-select!
@ -727,6 +713,7 @@ DEPENDENCIES
recaptcha recaptcha
redcarpet redcarpet
responders (~> 3.0) responders (~> 3.0)
rexml
rolify rolify
rqrcode rqrcode
rspec-activemodel-mocks rspec-activemodel-mocks
@ -756,7 +743,7 @@ DEPENDENCIES
whenever whenever
RUBY VERSION RUBY VERSION
ruby 3.1.0 ruby 3.1.2
BUNDLED WITH BUNDLED WITH
2.3.3 2.3.3

View file

@ -133,7 +133,7 @@ function get_color() {
function word_count(text, divId, maxcount) { function word_count(text, divId, maxcount) {
var area = document.getElementById(text.id) var area = document.getElementById(text.id)
Countable.live(area, function(counter) { Countable.once(area, function(counter) {
$('#' + divId).text(counter.words); $('#' + divId).text(counter.words);
if (counter.words > maxcount) if (counter.words > maxcount)
$('#' + divId).css('color', 'red'); $('#' + divId).css('color', 'red');
@ -157,7 +157,7 @@ $( document ).ready(function() {
.trigger('change'); .trigger('change');
/* Count the proposal abstract length */ /* Count the proposal abstract length */
$("#event_abstract").bind('change keyup paste input', function() { $("#event_abstract").on('input', function() {
var $selected = $("#event_event_type_id option:selected") var $selected = $("#event_event_type_id option:selected")
var max = $selected.data("max-words"); var max = $selected.data("max-words");
word_count(this, 'abstract-count', max); word_count(this, 'abstract-count', max);

View file

@ -20,7 +20,7 @@ module Admin
respond_to do |format| respond_to do |format|
format.html format.html
format.json do format.json do
render json: RegistrationDatatable.new({}, conference: @conference, view_context: view_context) render json: RegistrationDatatable.new(params, conference: @conference, view_context: view_context)
end end
format.pdf { render 'index', layout: false } format.pdf { render 'index', layout: false }
format.xlsx do format.xlsx do

View file

@ -23,7 +23,7 @@ module Admin
respond_to do |format| respond_to do |format|
format.html format.html
format.json do format.json do
render json: UserDatatable.new(view_context: view_context) render json: UserDatatable.new(params, view_context: view_context)
end end
end end
end end

View file

@ -26,14 +26,9 @@ class RegistrationsController < Devise::RegistrationsController
end end
def account_update_params def account_update_params
params.require(:user).permit( user_attributes = [:email, :name, :password, :password_confirmation, :current_password, :email_public]
:email, user_attributes << :is_admin if current_user.is_admin?
:password, params.require(:user).permit(user_attributes)
:password_confirmation,
:current_password,
:username,
:email_public
)
end end
def check_captcha def check_captcha

View file

@ -40,6 +40,6 @@ class SurveysController < ApplicationController
end end
end end
redirect_back(fallback_location: root_path) redirect_back(fallback_location: root_path, notice: 'Successfully responded to survey.')
end end
end end

View file

@ -26,7 +26,7 @@ class UsersController < ApplicationController
def search def search
respond_to do |format| respond_to do |format|
format.json do format.json do
render json: { users: User.where('username like ?', "%#{params[:query]}%").select(:username, :id) } render json: { users: User.active.where('username like ?', "%#{params[:query]}%").select(:username, :id) }
end end
end end
end end

View file

@ -14,7 +14,6 @@ class RegistrationDatatable < AjaxDatatablesRails::ActiveRecord
@view_columns ||= { @view_columns ||= {
id: { source: 'Registration.id', cond: :eq }, id: { source: 'Registration.id', cond: :eq },
name: { source: 'User.name' }, name: { source: 'User.name' },
roles: { source: 'Role.name' },
email: { source: 'User.email' }, email: { source: 'User.email' },
accepted_code_of_conduct: { source: 'Registration.accepted_code_of_conduct', searchable: false }, accepted_code_of_conduct: { source: 'Registration.accepted_code_of_conduct', searchable: false },
actions: { source: 'Registration.id', searchable: false, orderable: false } actions: { source: 'Registration.id', searchable: false, orderable: false }
@ -41,7 +40,6 @@ class RegistrationDatatable < AjaxDatatablesRails::ActiveRecord
roles: conference_role_titles(record.user), roles: conference_role_titles(record.user),
email: record.email, email: record.email,
accepted_code_of_conduct: !!record.accepted_code_of_conduct, # rubocop:disable Style/DoubleNegation accepted_code_of_conduct: !!record.accepted_code_of_conduct, # rubocop:disable Style/DoubleNegation
questions: {},
edit_url: edit_admin_conference_registration_path(conference, record), edit_url: edit_admin_conference_registration_path(conference, record),
DT_RowId: record.id DT_RowId: record.id
} }
@ -53,7 +51,7 @@ class RegistrationDatatable < AjaxDatatablesRails::ActiveRecord
end end
# override upstream santitation, which converts everything to strings # override upstream santitation, which converts everything to strings
def sanitize(records) def sanitize_data(records)
records records
end end
end end

View file

@ -1,12 +1,17 @@
# frozen_string_literal: true # frozen_string_literal: true
class UserDatatable < AjaxDatatablesRails::Base class UserDatatable < AjaxDatatablesRails::ActiveRecord
extend Forwardable extend Forwardable
def_delegator :@view, :show_roles def_delegator :@view, :show_roles
def_delegator :@view, :admin_user_path def_delegator :@view, :admin_user_path
def_delegator :@view, :edit_admin_user_path def_delegator :@view, :edit_admin_user_path
def initialize(params, opts = {})
@view = opts[:view_context]
super
end
def view_columns def view_columns
# Declare strings in this format: ModelName.column_name # Declare strings in this format: ModelName.column_name
# or in aliased_join_table.column_name format # or in aliased_join_table.column_name format
@ -17,8 +22,7 @@ class UserDatatable < AjaxDatatablesRails::Base
name: { source: 'User.name' }, name: { source: 'User.name' },
attended: { source: 'attended_count', searchable: false }, attended: { source: 'attended_count', searchable: false },
roles: { source: 'Role.name' }, roles: { source: 'Role.name' },
view_url: { source: 'User.id', searchable: false, orderable: false }, actions: { source: 'User.id', searchable: false, orderable: false }
edit_url: { source: 'User.id', searchable: false, orderable: false }
} }
end end

View file

@ -111,36 +111,12 @@ module ApplicationHelper
safe_join(event.speakers.map{ |speaker| link_to speaker.name, admin_user_path(speaker) }, ',') safe_join(event.speakers.map{ |speaker| link_to speaker.name, admin_user_path(speaker) }, ',')
end end
def speaker_selector_input(form)
user_selector_input(:speakers, form, '', true)
end
def user_selector_input(field, form, hint = '', multiple = true)
users = User.where(is_disabled: false).pluck(:id, :name, :username, :email).map { |user| [user[0], user[1].blank? ? user[2] : user[1], user[2], user[3]] }.sort_by { |user| user[1].downcase }
form.input(
field,
as: :select,
include_blank: true,
label: field.to_s.titleize,
hint: hint,
collection: options_for_select(
users.map { |user| ["#{user[1]} (#{user[2]}) #{user[3]}", user[0]] },
(form.object.send(field)&.map(&:id) || form.object.send(field)&.id)
),
input_html: {
class: 'select-help-toggle',
multiple: multiple,
placeholder: (multiple ? 'Select users...' : 'Select a user...')
}
)
end
def event_types_sentence(conference) def event_types_sentence(conference)
conference.event_types.map { |et| et.title.pluralize }.to_sentence conference.event_types.map { |et| et.title.pluralize }.to_sentence
end end
def sign_in_path def sign_in_path
if ENV['OSEM_ICHAIN_ENABLED'] == 'true' if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
new_user_ichain_session_path new_user_ichain_session_path
else else
new_user_session_path new_user_session_path
@ -164,9 +140,7 @@ module ApplicationHelper
def nav_root_link_for(conference) def nav_root_link_for(conference)
link_text = ( link_text = (
conference.try(:organization).try(:name) || conference.try(:organization).try(:name) || ENV.fetch('OSEM_NAME', 'OSEM')
ENV['OSEM_NAME'] ||
'OSEM'
) )
link_to( link_to(
link_text, link_text,

View file

@ -190,15 +190,18 @@ module FormatHelper
def markdown(text, escape_html=true) def markdown(text, escape_html=true)
return '' if text.nil? return '' if text.nil?
options = { markdown_options = {
autolink: true, autolink: true,
space_after_headers: true, space_after_headers: true,
no_intra_emphasis: true, no_intra_emphasis: true,
fenced_code_blocks: true, fenced_code_blocks: true,
disable_indented_code_blocks: true, disable_indented_code_blocks: true
safe_links_only: true
} }
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html: escape_html), options) render_options = {
escape_html: escape_html,
safe_links_only: true
}
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(render_options), markdown_options)
sanitize(markdown.render(text)) sanitize(markdown.render(text))
end end

View file

@ -19,7 +19,7 @@ module UsersHelper
unless Rails.application.secrets.send(provider_key).blank? || Rails.application.secrets.send(provider_secret).blank? unless Rails.application.secrets.send(provider_key).blank? || Rails.application.secrets.send(provider_secret).blank?
providers << provider providers << provider
end end
providers << provider if !ENV["OSEM_#{provider.upcase}_KEY"].blank? && !ENV["OSEM_#{provider.upcase}_SECRET"].blank? providers << provider if ENV.fetch("OSEM_#{provider.upcase}_KEY", nil).present? && ENV.fetch("OSEM_#{provider.upcase}_SECRET", nil).present?
end end
providers.uniq providers.uniq

View file

@ -42,7 +42,7 @@ class Ability
can [:index, :show], Survey, surveyable_type: 'Conference' can [:index, :show], Survey, surveyable_type: 'Conference'
# Things that are possible without ichain enabled that are **not*+ possible with ichain mode enabled. # Things that are possible without ichain enabled that are **not*+ possible with ichain mode enabled.
if ENV['OSEM_ICHAIN_ENABLED'] != 'true' if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) != 'true'
# There is no reliable way for this workflow (enable not logged in users to fill out a form, then telling # There is no reliable way for this workflow (enable not logged in users to fill out a form, then telling
# them to sign up once they submit) in ichain. So enable it only without ichain. # them to sign up once they submit) in ichain. So enable it only without ichain.
@ -122,9 +122,7 @@ class Ability
# if not, do not allow replies. # if not, do not allow replies.
# do not allow replies before the start_date or after the end_date of survey # do not allow replies before the start_date or after the end_date of survey
cannot :reply, Survey do |survey| cannot :reply, Survey, &:closed?
survey.start_date > Time.current || survey.end_date < Time.current
end
can [:destroy], Openid can [:destroy], Openid

View file

@ -51,7 +51,7 @@ class AdminAbility
# for admins # for admins
can :manage, :all if user.is_admin can :manage, :all if user.is_admin
# even admin cannot create new users with ICHAIN enabled # even admin cannot create new users with ICHAIN enabled
cannot [:new, :create], User if ENV['OSEM_ICHAIN_ENABLED'] == 'true' cannot [:new, :create], User if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
cannot :revert_object, PaperTrail::Version do |version| cannot :revert_object, PaperTrail::Version do |version|
(version.event == 'create' && %w[Conference User Event].include?(version.item_type)) (version.event == 'create' && %w[Conference User Event].include?(version.item_type))
end end
@ -142,6 +142,10 @@ class AdminAbility
can :manage, Room, venue: { conference_id: conf_ids } can :manage, Room, venue: { conference_id: conf_ids }
can :manage, Sponsor, conference_id: conf_ids can :manage, Sponsor, conference_id: conf_ids
can :manage, SponsorshipLevel, conference_id: conf_ids can :manage, SponsorshipLevel, conference_id: conf_ids
can :manage, Survey, surveyable_type: 'Conference',
surveyable_id: conf_ids
can :manage, SurveyQuestion, survey: { surveyable_type: 'Conference',
surveyable_id: conf_ids }
can :manage, Ticket, conference_id: conf_ids can :manage, Ticket, conference_id: conf_ids
can :create, TicketScanning do |ticket_scanning| can :create, TicketScanning do |ticket_scanning|
conf_id = ticket_scanning.physical_ticket.ticket_purchase.conference_id conf_id = ticket_scanning.physical_ticket.ticket_purchase.conference_id

View file

@ -13,12 +13,12 @@ class EmailSettings < ApplicationRecord
'conference_start_date' => conference.start_date, 'conference_start_date' => conference.start_date,
'conference_end_date' => conference.end_date, 'conference_end_date' => conference.end_date,
'registrationlink' => Rails.application.routes.url_helpers.conference_conference_registration_url( 'registrationlink' => Rails.application.routes.url_helpers.conference_conference_registration_url(
conference.short_title, host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000')), conference.short_title, host: ENV.fetch('OSEM_HOSTNAME', 'localhost:3000')),
'conference_splash_link' => Rails.application.routes.url_helpers.conference_url( 'conference_splash_link' => Rails.application.routes.url_helpers.conference_url(
conference.short_title, host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000')), conference.short_title, host: ENV.fetch('OSEM_HOSTNAME', 'localhost:3000')),
'schedule_link' => Rails.application.routes.url_helpers.conference_schedule_url( 'schedule_link' => Rails.application.routes.url_helpers.conference_schedule_url(
conference.short_title, host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000')) conference.short_title, host: ENV.fetch('OSEM_HOSTNAME', 'localhost:3000'))
} }
if conference.program.cfp if conference.program.cfp
@ -45,7 +45,7 @@ class EmailSettings < ApplicationRecord
if event if event
h['eventtitle'] = event.title h['eventtitle'] = event.title
h['proposalslink'] = Rails.application.routes.url_helpers.conference_program_proposals_url( h['proposalslink'] = Rails.application.routes.url_helpers.conference_program_proposals_url(
conference.short_title, host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000')) conference.short_title, host: ENV.fetch('OSEM_HOSTNAME', 'localhost:3000'))
end end
if booth if booth

View file

@ -32,4 +32,8 @@ class Survey < ActiveRecord::Base
now <= end_date now <= end_date
end end
end end
def closed?
!active?
end
end end

View file

@ -23,8 +23,8 @@ class User < ApplicationRecord
end end
has_many :users_roles has_many :users_roles
has_many :roles, through: :users_roles, dependent: :destroy
rolify rolify
has_many :roles, through: :users_roles, dependent: :destroy
has_paper_trail on: [:create, :update], ignore: [:sign_in_count, :remember_created_at, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip, :unconfirmed_email, has_paper_trail on: [:create, :update], ignore: [:sign_in_count, :remember_created_at, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip, :unconfirmed_email,
:avatar_content_type, :avatar_file_size, :avatar_updated_at, :updated_at, :confirmation_sent_at, :confirmation_token, :reset_password_token] :avatar_content_type, :avatar_file_size, :avatar_updated_at, :updated_at, :confirmation_sent_at, :confirmation_token, :reset_password_token]
@ -51,7 +51,7 @@ class User < ApplicationRecord
# :lockable, :timeoutable and :omniauthable # :lockable, :timeoutable and :omniauthable
devise_modules = [] devise_modules = []
devise_modules += if ENV['OSEM_ICHAIN_ENABLED'] == 'true' devise_modules += if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
[:ichain_authenticatable, :ichain_registerable, :omniauthable, omniauth_providers: []] [:ichain_authenticatable, :ichain_registerable, :omniauthable, omniauth_providers: []]
else else
[:database_authenticatable, :registerable, [:database_authenticatable, :registerable,

View file

@ -21,7 +21,7 @@ class Venue < ApplicationRecord
def country_name def country_name
name = ISO3166::Country[country] name = ISO3166::Country[country]
name&.name name&.iso_short_name
end end
def location? def location?

View file

@ -21,8 +21,8 @@
#onboarding.tab-pane.active{ role: 'tabpanel' } #onboarding.tab-pane.active{ role: 'tabpanel' }
.checkbox .checkbox
%label %label
= f.check_box :send_on_registration, data: {name: 'email_settings_registration_subject'}, class: 'send_on_radio' = f.check_box :send_on_registration, data: {name: 'email_settings_registration_subject'}, class: 'send_on_radio'
Send an email when the user registers for the conference? Send an email when the user registers for the conference?
.form-group .form-group
= f.label :registration_subject, 'Subject' = f.label :registration_subject, 'Subject'
= f.text_field :registration_subject, class: 'form-control' = f.text_field :registration_subject, class: 'form-control'
@ -38,7 +38,7 @@
.checkbox .checkbox
%label %label
= f.check_box :send_on_submitted_proposal, data: { name: 'email_settings_proposal_submited_subject'}, class: 'send_on_radio' = f.check_box :send_on_submitted_proposal, data: { name: 'email_settings_proposal_submited_subject'}, class: 'send_on_radio'
Send an email when the proposal is submitted Send an email when the proposal is submitted?
.form-group .form-group
= f.label :submitted_proposal_subject, 'Subject' = f.label :submitted_proposal_subject, 'Subject'
= f.text_field :submitted_proposal_subject, class: 'form-control' = f.text_field :submitted_proposal_subject, class: 'form-control'
@ -50,8 +50,8 @@
= render partial: 'help', locals: { id: 'submitted_proposal_help', show_event_variables: true } = render partial: 'help', locals: { id: 'submitted_proposal_help', show_event_variables: true }
.checkbox .checkbox
%label %label
= f.check_box :send_on_accepted, data: { name: 'email_settings_accepted_subject' }, class: 'send_on_radio' = f.check_box :send_on_accepted, data: { name: 'email_settings_accepted_subject' }, class: 'send_on_radio'
Send an email when the proposal is accepted? Send an email when the proposal is accepted?
.form-group .form-group
= f.label :accepted_subject, 'Subject' = f.label :accepted_subject, 'Subject'
= f.text_field :accepted_subject, class: 'form-control' = f.text_field :accepted_subject, class: 'form-control'
@ -100,7 +100,7 @@
.checkbox .checkbox
%label %label
= f.check_box :send_on_conference_dates_updated, data: { name: 'email_settings_conference_dates_updated_subject'}, class: 'send_on_radio' = f.check_box :send_on_conference_dates_updated, data: { name: 'email_settings_conference_dates_updated_subject'}, class: 'send_on_radio'
Send an email when to all participants if the conference dates are changed? Send an email to all participants if the conference dates are changed?
.form-group .form-group
= f.label :conference_dates_updated_subject, 'Subject' = f.label :conference_dates_updated_subject, 'Subject'
= f.text_field :conference_dates_updated_subject, class: 'form-control' = f.text_field :conference_dates_updated_subject, class: 'form-control'
@ -116,7 +116,7 @@
.checkbox .checkbox
%label %label
= f.check_box :send_on_conference_registration_dates_updated, data: { name: 'email_settings_conference_registration_dates_updated_subject' }, class: 'send_on_radio' = f.check_box :send_on_conference_registration_dates_updated, data: { name: 'email_settings_conference_registration_dates_updated_subject' }, class: 'send_on_radio'
Send an email when to all participants if the conference registration dates changed? Send an email to all participants if the conference registration dates changed?
.form-group .form-group
= f.label :conference_registration_dates_updated_subject, 'Subject' = f.label :conference_registration_dates_updated_subject, 'Subject'
= f.text_field :conference_registration_dates_updated_subject, class: 'form-control' = f.text_field :conference_registration_dates_updated_subject, class: 'form-control'
@ -132,7 +132,7 @@
.checkbox .checkbox
%label %label
= f.check_box :send_on_venue_updated, data: { name: 'email_settings_venue_updated_subject'}, class: 'send_on_radio' = f.check_box :send_on_venue_updated, data: { name: 'email_settings_venue_updated_subject'}, class: 'send_on_radio'
Send an email on updating the Venue? Send an email on updating the venue?
.form-group .form-group
= f.label :venue_updated_subject, 'Subject' = f.label :venue_updated_subject, 'Subject'
= f.text_field :venue_updated_subject, class: 'form-control' = f.text_field :venue_updated_subject, class: 'form-control'
@ -147,9 +147,9 @@
= render partial: 'help', locals: {id: 'updated_venue_help', show_event_variables: false} = render partial: 'help', locals: {id: 'updated_venue_help', show_event_variables: false}
#cfp.tab-pane{ role: 'tabpanel' } #cfp.tab-pane{ role: 'tabpanel' }
.checkbox .checkbox
%labl %label
= f.check_box :send_on_program_schedule_public = f.check_box :send_on_program_schedule_public
Send an email when to all participants if the schedule is made public? Send an email to all participants if the schedule is made public?
.form-group .form-group
= f.label :program_schedule_public_subject, 'Subject' = f.label :program_schedule_public_subject, 'Subject'
= f.text_field :program_schedule_public_subject, class: 'form-control' = f.text_field :program_schedule_public_subject, class: 'form-control'
@ -165,7 +165,7 @@
.checkbox .checkbox
%label %label
= f.check_box :send_on_cfp_dates_updated = f.check_box :send_on_cfp_dates_updated
Send an email when to all participants if call for paper dates are updated? Send an email to all participants if call for paper dates are updated?
.form-group .form-group
= f.label :cfp_dates_updated_subject, 'Subject' = f.label :cfp_dates_updated_subject, 'Subject'
= f.text_field :cfp_dates_updated_subject, class: 'form-control' = f.text_field :cfp_dates_updated_subject, class: 'form-control'
@ -179,9 +179,10 @@
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'updated_cfp_help' } Show Help %a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'updated_cfp_help' } Show Help
= render partial: 'help', locals: {id: 'updated_cfp_help', show_event_variables: false} = render partial: 'help', locals: {id: 'updated_cfp_help', show_event_variables: false}
#booth.tab-pane{ role: 'tabpanel' } #booth.tab-pane{ role: 'tabpanel' }
.check_box .checkbox
%label %label
= f.check_box :send_on_booths_acceptance = f.check_box :send_on_booths_acceptance
Send an email when the booth is accepted?
.form-group .form-group
= f.label :booths_acceptance_subject, 'Subject' = f.label :booths_acceptance_subject, 'Subject'
= f.text_field :booths_acceptance_subject, class: 'form-control' = f.text_field :booths_acceptance_subject, class: 'form-control'
@ -197,6 +198,7 @@
.checkbox .checkbox
%label %label
= f.check_box :send_on_booths_rejection = f.check_box :send_on_booths_rejection
Send an email when the booth is rejected?
.form-group .form-group
= f.label :booths_rejection_subject, 'Subject' = f.label :booths_rejection_subject, 'Subject'
= f.text_field :booths_rejection_subject, class: 'form-control' = f.text_field :booths_rejection_subject, class: 'form-control'

View file

@ -26,7 +26,6 @@
%tr %tr
%th{ width: '0' } ID# %th{ width: '0' } ID#
%th{ width: '25%' } Name %th{ width: '25%' } Name
%th{ width: '0' } Roles
%th{ width: '0' } E-Mail %th{ width: '0' } E-Mail
%th{ width: '0' } %th{ width: '0' }
%abbr{ title: 'Code of Conduct' } CoC %abbr{ title: 'Code of Conduct' } CoC
@ -63,14 +62,6 @@
return content; return content;
} }
}, },
{
"name": "roles",
"data": "roles",
"className": "truncate",
"render": function(data, type, row) {
return data.join(', ');
}
},
{ {
"data": "email" "data": "email"
}, },
@ -80,13 +71,13 @@
"searchable": false "searchable": false
}, },
{ {
"data": null, "data": "actions",
"className": "actions", "className": "actions",
"searchable": false, "searchable": false,
"sortable": false, "sortable": false,
"render": function (data, type, row, meta) { "render": function (data, type, row, meta) {
return '<div class="btn-group">'+ return '<div class="btn-group">'+
'<a class="btn-primary" href="'+data.edit_url+'">Edit</a>'+ '<a class="btn-primary" href="'+row.edit_url+'">Edit</a>'+
'</div>'; '</div>';
} }
} }
@ -94,5 +85,4 @@
}); });
registrationsDataTable.columns(3).visible(codeOfConductPresent); registrationsDataTable.columns(3).visible(codeOfConductPresent);
registrationsDataTable.columns(2).visible(false);
}); });

View file

@ -30,7 +30,7 @@
= f.label :max_choices = f.label :max_choices
= f.number_field :max_choices, class: 'form-control' = f.number_field :max_choices, class: 'form-control'
.form-group .form-group
%label{ required: 'required' } %label{ for: 'survey_question_kind', required: 'required' }
Type of Question: Type of Question:
.form-group .form-group
%select.selectpicker.form-control{ id: 'survey_question_kind', name: 'survey_question[kind]' } %select.selectpicker.form-control{ id: 'survey_question_kind', name: 'survey_question[kind]' }

View file

@ -0,0 +1 @@
= render partial: 'form'

View file

@ -22,7 +22,7 @@
= f.select :target, Survey.targets.keys, class: 'form-control' = f.select :target, Survey.targets.keys, class: 'form-control'
.form-group .form-group
= f.label :start_date = f.label :start_date
= f.text_field :start_date, class: 'datetimepicker', class: 'form-control' = f.text_field :start_date, class: 'datetimepicker form-control'
= f.label :end_date = f.label :end_date
= f.text_field :end_date, class: 'datetimepicker', class: 'form-control' = f.text_field :end_date, class: 'datetimepicker form-control'
= f.submit nil, class: 'btn btn-primary' = f.submit nil, class: 'btn btn-primary'

View file

@ -61,13 +61,13 @@
} }
}, },
{ {
"data": null, "data": "actions",
"className": "actions", "className": "actions",
"sortable": false, "sortable": false,
"render": function (data, type, row, meta) { "render": function (data, type, row, meta) {
return '<div class="btn-group">'+ return '<div class="btn-group">'+
'<a class="btn-info" href="'+data.view_url+'">View</a>'+ '<a class="btn-info" href="'+row.view_url+'">View</a>'+
'<a class="btn-primary" href="'+data.edit_url+'">Edit</a>'+ '<a class="btn-primary" href="'+row.edit_url+'">Edit</a>'+
'</div>'; '</div>';
} }
} }

View file

@ -1,8 +1,9 @@
:ruby :ruby
combined_data ||= {} combined_data ||= {}
data ||= chart_values(combined_data) data ||= chart_values(combined_data)
colors ||= chart_colors(combined_data)
.text-center .text-center
%h4 %h4
= title = title
= pie_chart data, donut: true, legend: 'bottom', download: true, messages: { empty: 'No data' }, colors: chart_colors(combined_data) = pie_chart data, donut: true, legend: 'bottom', download: true, messages: { empty: 'No data' }, colors: colors

View file

@ -24,7 +24,8 @@
%abbr{title: 'This field is required'} * %abbr{title: 'This field is required'} *
= f.text_field :website_url, class: 'form-control', required: true, placeholder: 'URL' = f.text_field :website_url, class: 'form-control', required: true, placeholder: 'URL'
.form-group .form-group
= f.text_field :responsible_ids, multiple: true, class: "form-control", id: "booth_responsibles", placeholder: "Responsibles" = f.label :responsible_ids, 'Responsibles'
= f.select :responsible_ids, @booth.responsibles.pluck(:username, :id), {}, { multiple: true, class: 'form-control', id: 'users_selectize', placeholder: 'Responsibles' }
%span.help-block %span.help-block
The people responsible for the `t('booth')`. You can only select existing users. The people responsible for the `t('booth')`. You can only select existing users.
.form-group .form-group
@ -38,33 +39,5 @@
- else - else
Update `(t'booth').capitalize` Request Update `(t'booth').capitalize` Request
:javascript = render partial: 'shared/user_selectize'
$(document).ready(function() {
$('#booth_responsibles').selectize({
persist: false,
create: false,
valueField: 'id',
labelField: 'username',
searchField: 'username',
load: function(query, callback) {
if (!query.length) return callback();
$.ajax({
url: "#{search_users_path}.json",
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function(res) {
console.log("selectize error");
callback();
},
success: function(res) {
console.log("selectize success");
// console.log(res);
callback(res.users);
}
});
}
});
});

View file

@ -11,7 +11,7 @@
%legend %legend
%span %span
=link_to('#signup', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do =link_to('#signup', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do
= ENV['OSEM_NAME'] || 'OSEM' = ENV.fetch('OSEM_NAME', 'OSEM')
Account Account
%span.pull-right#account-already %span.pull-right#account-already
=link_to('#signin', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do =link_to('#signin', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do

View file

@ -11,7 +11,7 @@
%legend %legend
%span %span
=link_to('#signup', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do =link_to('#signup', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do
= ENV['OSEM_NAME'] || 'OSEM' = ENV.fetch('OSEM_NAME', 'OSEM')
Account Account
%span.pull-right#account-already %span.pull-right#account-already
=link_to('#signin', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do =link_to('#signin', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do

View file

@ -11,9 +11,11 @@
= link_to(conference_program_proposal_path(conference_id, = link_to(conference_program_proposal_path(conference_id,
event), event),
class: 'thumbnail') do class: 'thumbnail') do
= image_tag speaker.gravatar_url(size: 300), - if speaker
class: ['img-responsive', 'img-circle'], = image_tag speaker.gravatar_url(size: 300),
title: speaker.name class: ['img-responsive', 'img-circle'],
title: speaker.name
.caption .caption
%h3.text-center= speaker.name - if speaker
%h3.text-center= speaker.name
%h4.text-center= event.title %h4.text-center= event.title

View file

@ -1,21 +1,22 @@
.row .container
.col-md-12 .row
.well .col-md-12
%h1 .well
Welcome to your new %h1
= link_to('https://osem.io') do Welcome to your new
Open Source Event Manager = link_to('https://osem.io') do
installation! Open Source Event Manager
%p installation!
The first user to %p
- if ENV['OSEM_ICHAIN_ENABLED'] == 'true' The first user to
= link_to(new_ichain_registration_path('user')) do - if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
sign up = link_to(new_ichain_registration_path('user')) do
- else sign up
= link_to(new_registration_path('user')) do - else
sign up = link_to(new_registration_path('user')) do
will the be administrator of it. sign up
%p will the be administrator of it.
We hope you enjoy using OSEM, if you have any question don't hesitate to %p
= link_to('https://osem.io/#contact') do We hope you enjoy using OSEM, if you have any question don't hesitate to
contact us! = link_to('https://osem.io/#contact') do
contact us!

View file

@ -1,6 +1,6 @@
- content_for :head do - content_for :head do
%meta{ property: "og:title", content: @conference.title } %meta{ property: "og:title", content: @conference.title }
%meta{ property: "og:site_name", content: (ENV['OSEM_NAME'] || 'OSEM') } %meta{ property: "og:site_name", content: ENV.fetch('OSEM_NAME', 'OSEM') }
%meta{ property: "og:description", content: @conference.description } %meta{ property: "og:description", content: @conference.description }
%meta{ property: "og:url", content: conference_url(@conference.short_title) } %meta{ property: "og:url", content: conference_url(@conference.short_title) }
%meta{ property: "twitter:title", content: (@conference.title) } %meta{ property: "twitter:title", content: (@conference.title) }

View file

@ -1,7 +1,8 @@
.form-group - unless @user.persisted?
= f.label :username .form-group
%abbr{title: 'This field is required'} * = f.label :username
= f.text_field :username, required: true, autocomplete: 'off', class: 'form-control', placeholder: 'Username' %abbr{title: 'This field is required'} *
= f.text_field :username, required: true, autocomplete: 'off', class: 'form-control', placeholder: 'Username'
.form-group .form-group
= f.label :email = f.label :email
%abbr{title: 'This field is required'} * %abbr{title: 'This field is required'} *
@ -10,17 +11,17 @@
.checkbox .checkbox
%label %label
= f.check_box :email_public = f.check_box :email_public
Check if you want your email address to appear publicly (e.g. on sessions, registration lists, etc.) Do you want your email address to appear publicly
.form-group %span.help-block
= f.label :name, 'Real Name' For instance on sessions pages or registration lists.
= f.text_field :name, required: true, class: 'form-control', placeholder: 'Name'
.form-group .form-group
= f.label :password, 'Password' = f.label :password, 'Password'
%abbr{title: 'This field is required'} * - if !@user.persisted?
= f.password_field :password, required: true, class: 'form-control', placeholder: 'Password' %abbr{title: 'This field is required'} *
= f.password_field :password, required: !@user.persisted?, class: 'form-control', placeholder: 'Password'
.form-group .form-group
= f.label :password_confirmation, 'Password Confirmation' = f.label :password_confirmation, 'Password Confirmation'
= f.password_field :password_confirmation, required: true, class: 'form-control', placeholder: 'Password Confirmation' = f.password_field :password_confirmation, required: !@user.persisted?, class: 'form-control', placeholder: 'Password Confirmation'
- if @user.persisted? - if @user.persisted?
%p.text-muted %p.text-muted
Leave blank if you don't want to change your password Leave blank if you don't want to change your password
@ -32,16 +33,16 @@
is Admin? is Admin?
%span.help-block %span.help-block
An admin can create a new conference, manage users and make other users admins. An admin can create a new conference, manage users and make other users admins.
- elsif @user.persisted? - if @user.persisted?
%h4 %h4
Confirmation Confirmation
%hr %hr
.form-group .form-group
= f.label :password, "Current Password" = f.label :password, "Current Password"
%abbr{title: 'This field is required'} * %abbr{title: 'This field is required'} *
= f.password_field :current_password, autocomplete: 'off', class: 'form-control', placeholder: 'Password' = f.password_field :current_password, required: true, autocomplete: 'off', class: 'form-control', placeholder: 'Password'
%p.text-muted %p.text-muted
We need your current password to confirm password, email or username changes We need your current password to confirm changes
- Feature.with(:recaptcha) do - Feature.with(:recaptcha) do
.form-group .form-group
= recaptcha_tags = recaptcha_tags

View file

@ -1,4 +1,4 @@
- if ENV['OSEM_ICHAIN_ENABLED'] != 'true' - if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) != 'true'
= form_tag(new_user_session_path, class: 'form-horizontal') do = form_tag(new_user_session_path, class: 'form-horizontal') do
%legend %legend
%span %span

View file

@ -37,7 +37,7 @@
= link_to(admin_revision_history_path) do = link_to(admin_revision_history_path) do
%span.fa.fa-history %span.fa.fa-history
Revision History Revision History
- if ENV['ORGANIZATIONS_ENABLED'] == 'true' - if ENV.fetch('ORGANIZATIONS_ENABLED', nil) == 'true'
%li %li
= link_to(admin_organizations_path) do = link_to(admin_organizations_path) do
%span.fa.fa-group %span.fa.fa-group

View file

@ -32,7 +32,7 @@
= render 'layouts/user_menu' = render 'layouts/user_menu'
- else - else
%ul.nav.navbar-nav.navbar-right %ul.nav.navbar-nav.navbar-right
- if ENV['OSEM_ICHAIN_ENABLED'] == 'true' - if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
%li{class: "#{active_nav_li(new_ichain_registration_path('user'))}"} %li{class: "#{active_nav_li(new_ichain_registration_path('user'))}"}
= link_to(new_ichain_registration_path('user')) do = link_to(new_ichain_registration_path('user')) do
%span.fa.fa-heart %span.fa.fa-heart
@ -48,7 +48,7 @@
Sign In Sign In
%span.caret %span.caret
.dropdown-menu .dropdown-menu
- if ENV['OSEM_ICHAIN_ENABLED'] == 'true' - if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
= form_tag User.ichain_login_url do = form_tag User.ichain_login_url do
= text_field_tag 'username', nil, id: 'user_ichain_email_dd', class: 'form-control', placeholder: 'Username' = text_field_tag 'username', nil, id: 'user_ichain_email_dd', class: 'form-control', placeholder: 'Username'
= password_field_tag 'password', nil, id: 'user_ichain_password_dd', class: 'form-control', placeholder: 'Password' = password_field_tag 'password', nil, id: 'user_ichain_password_dd', class: 'form-control', placeholder: 'Password'

View file

@ -10,7 +10,7 @@
%li= link_to "See all unread Comments (#{unread_notifications(current_user).length})", admin_comments_path %li= link_to "See all unread Comments (#{unread_notifications(current_user).length})", admin_comments_path
%li= link_to 'See all Comments', admin_comments_path(anchor: 'all_comments') %li= link_to 'See all Comments', admin_comments_path(anchor: 'all_comments')
%li.divider %li.divider
- unless ENV['OSEM_ICHAIN_ENABLED'] == 'true' - unless ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
%li %li
= link_to(edit_user_registration_path) do = link_to(edit_user_registration_path) do
%span.fa.fa-wrench %span.fa.fa-wrench
@ -40,7 +40,7 @@
%span.fa.fa-shopping-bag %span.fa.fa-shopping-bag
My #{(t'booth').capitalize } Requests My #{(t'booth').capitalize } Requests
%li %li
- if ENV['OSEM_ICHAIN_ENABLED'] == 'true' - if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
= link_to(destroy_user_ichain_session_path, method: 'delete') do = link_to(destroy_user_ichain_session_path, method: 'delete') do
%span.fa.fa-minus %span.fa.fa-minus
Sign out Sign out
@ -76,7 +76,7 @@
= link_to(admin_revision_history_path) do = link_to(admin_revision_history_path) do
%span.fa.fa-history %span.fa.fa-history
Revision History Revision History
- if ENV['ORGANIZATIONS_ENABLED'] == 'true' - if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
%li %li
= link_to(admin_organizations_path) do = link_to(admin_organizations_path) do
%span.fa.fa-group %span.fa.fa-group

View file

@ -2,7 +2,7 @@
%head %head
%meta{charset: 'utf-8'} %meta{charset: 'utf-8'}
%meta{name: 'viewport', content: 'width=device-width, initial-scale=1, maximum-scale=1'} %meta{name: 'viewport', content: 'width=device-width, initial-scale=1, maximum-scale=1'}
%title= content_for?(:title) ? yield(:title) : (ENV['OSEM_NAME'] || 'OSEM') %title= content_for?(:title) ? yield(:title) : ENV.fetch('OSEM_NAME', 'OSEM')
%meta{content: '', name: 'description'} %meta{content: '', name: 'description'}
%meta{content: '', name: 'author'} %meta{content: '', name: 'author'}
= stylesheet_link_tag "application", media: 'all' = stylesheet_link_tag "application", media: 'all'
@ -10,7 +10,7 @@
= csrf_meta_tags = csrf_meta_tags
= content_for(:script_head) = content_for(:script_head)
- if ENV['OSEM_TRANSIFEX_APIKEY'] - if ENV.fetch('OSEM_TRANSIFEX_APIKEY', nil)
:javascript :javascript
window.liveSettings = { window.liveSettings = {
api_key: "#{ENV['OSEM_TRANSIFEX_APIKEY']}", api_key: "#{ENV['OSEM_TRANSIFEX_APIKEY']}",
@ -46,7 +46,7 @@
You can run, copy, distribute, study, change and improve it. You can run, copy, distribute, study, change and improve it.
The source code and the developers are on The source code and the developers are on
#{link_to "GitHub", "https://github.com/openSUSE/osem"}. #{link_to "GitHub", "https://github.com/openSUSE/osem"}.
- if ENV["SKYLIGHT_PUBLIC_DASHBOARD_URL"].present? - if ENV.fetch('SKYLIGHT_PUBLIC_DASHBOARD_URL', nil)
Performance data is available on Performance data is available on
#{link_to "Skylight", ENV["SKYLIGHT_PUBLIC_DASHBOARD_URL"]}. #{link_to "Skylight", ENV["SKYLIGHT_PUBLIC_DASHBOARD_URL"]}.
= yield :script_body = yield :script_body

View file

@ -22,6 +22,6 @@
= form_tag conference_payments_path do = form_tag conference_payments_path do
%script.stripe-button{ src: "https://checkout.stripe.com/checkout.js", %script.stripe-button{ src: "https://checkout.stripe.com/checkout.js",
data: { amount: @total_amount_to_pay.cents, label: "Pay #{humanized_money_with_symbol @total_amount_to_pay}", data: { amount: @total_amount_to_pay.cents, label: "Pay #{humanized_money_with_symbol @total_amount_to_pay}",
email: current_user.email, currency: @total_amount_to_pay.currency, name: ENV['OSEM_NAME'] || 'OSEM', email: current_user.email, currency: @total_amount_to_pay.currency, name: ENV.fetch('OSEM_NAME', 'OSEM'),
description: "book your tickets", key: Rails.application.secrets.stripe_publishable_key, locale: "auto"}} description: "book your tickets", key: Rails.application.secrets.stripe_publishable_key, locale: "auto"}}
= link_to 'Edit Purchase', conference_tickets_path(@conference.short_title), class: 'btn btn-default' = link_to 'Edit Purchase', conference_tickets_path(@conference.short_title), class: 'btn btn-default'

View file

@ -9,13 +9,20 @@
.form-group .form-group
= f.label :subtitle = f.label :subtitle
= f.text_field :subtitle, class: 'form-control' = f.text_field :subtitle, class: 'form-control'
= # speaker_selector_input f .form-group
= f.label :speaker_ids, 'Speakers'
= f.select :speaker_ids, f.object.speakers.pluck(:username, :id), {}, { multiple: true, class: "form-control", id: "users_selectize", placeholder: "Speakers" }
%span.help-block
The people responsible for the event, beside you. You can only select existing users.
- if @program.tracks.confirmed.cfp_active.any? - if @program.tracks.confirmed.cfp_active.any?
= f.label :track_id, 'Track' .form-group
= f.select :track_id, @program.tracks.confirmed.cfp_active.pluck(:name, :id), include_blank: '(Please select)' = f.label :track_id, 'Track'
= f.label :event_type_id, 'Type' = f.select :track_id, @program.tracks.confirmed.cfp_active.pluck(:name, :id), { include_blank: '(Please select)' }, { class: 'form-control' }
= f.select :event_type_id, event_type_select_options(@conference.program.event_types), { include_blank: false }, { class: 'select-help-toggle form-control' } .form-group
= f.label :event_type_id, 'Type'
= f.select :event_type_id, event_type_select_options(@conference.program.event_types), { include_blank: false }, { class: 'select-help-toggle form-control' }
- if @program.languages.present? - if @program.languages.present?
.form-group
= f.label :language = f.label :language
= f.select :language, @languages, { include_blank: false}, { class: 'select-help-toggle form-control' } = f.select :language, @languages, { include_blank: false}, { class: 'select-help-toggle form-control' }
- @conference.program.event_types.each do |event_type| - @conference.program.event_types.each do |event_type|
@ -72,10 +79,5 @@
%p.text-right %p.text-right
= f.submit 'Update Proposal', class: 'btn btn-success' = f.submit 'Update Proposal', class: 'btn btn-success'
:javascript = render partial: 'shared/user_selectize'
$(document).ready(function() {
$('#event_speaker_ids').selectize({
plugins: ['remove_button'],
maxItems: 5
} )
});

View file

@ -17,7 +17,7 @@
%legend %legend
%span %span
=link_to('#signup', role: 'tab', 'aria-controls' => 'home', 'data-toggle' => 'tab') do =link_to('#signup', role: 'tab', 'aria-controls' => 'home', 'data-toggle' => 'tab') do
= ENV['OSEM_NAME'] || 'OSEM' = ENV.fetch('OSEM_NAME', 'OSEM')
Account Account
%span.pull-right#account-already %span.pull-right#account-already
=link_to('#signin', role: 'tab', 'aria-controls' => 'home', 'data-toggle' => 'tab') do =link_to('#signin', role: 'tab', 'aria-controls' => 'home', 'data-toggle' => 'tab') do
@ -56,9 +56,10 @@
words. words.
= markdown_hint('[Tips to improve your presentations.](http://blog.hubspot.com/blog/tabid/6307/bid/5975/10-Rules-to-Instantly-Improve-Your-Presentations.aspx)') = markdown_hint('[Tips to improve your presentations.](http://blog.hubspot.com/blog/tabid/6307/bid/5975/10-Rules-to-Instantly-Improve-Your-Presentations.aspx)')
- if @program.cfp.enable_registrations? - if @program.cfp.enable_registrations?
.form-group .checkbox
= f.label :require_registration, 'Require participants to register to your event' %label
= f.check_box :require_registration, class: 'form-control' = f.check_box :require_registration
Require participants to register to your event?
%p.text-right %p.text-right
= link_to '#description', 'data-toggle' => 'collapse', id: 'description_link' do = link_to '#description', 'data-toggle' => 'collapse', id: 'description_link' do
Do you require something special for your event? Do you require something special for your event?

View file

@ -2,7 +2,7 @@
%meta{ property: "og:title", content: @event.title } %meta{ property: "og:title", content: @event.title }
%meta{ property: "og:url", content: conference_program_proposal_url(@conference.short_title, @event) } %meta{ property: "og:url", content: conference_program_proposal_url(@conference.short_title, @event) }
%meta{ property: "og:description", content: @event.abstract } %meta{ property: "og:description", content: @event.abstract }
%meta{ property: "og:site_name", content: (ENV['OSEM_NAME'] || 'OSEM') } %meta{ property: "og:site_name", content: ENV.fetch('OSEM_NAME', 'OSEM') }
- if @speakers_ordered.any? - if @speakers_ordered.any?
%meta{ property: "og:image", content: @speakers_ordered.first.gravatar_url } %meta{ property: "og:image", content: @speakers_ordered.first.gravatar_url }
%meta{ property: "og:image:secure_url", content: @speakers_ordered.first.gravatar_url } %meta{ property: "og:image:secure_url", content: @speakers_ordered.first.gravatar_url }

View file

@ -0,0 +1,30 @@
:javascript
$(document).ready(function() {
$('#users_selectize').selectize({
persist: false,
create: false,
valueField: 'id',
labelField: 'username',
searchField: 'username',
load: function(query, callback) {
if (!query.length) return callback();
$.ajax({
url: "#{search_users_path}.json",
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function(res) {
console.log("selectize error");
callback();
},
success: function(res) {
console.log("selectize success");
// console.log(res);
callback(res.users);
}
});
}
});
});

View file

@ -18,7 +18,7 @@ m = Module.new do
end end
def env_var_version def env_var_version
ENV['BUNDLER_VERSION'] ENV.fetch('BUNDLER_VERSION', nil)
end end
def cli_arg_version def cli_arg_version
@ -40,7 +40,7 @@ m = Module.new do
end end
def gemfile def gemfile
gemfile = ENV['BUNDLE_GEMFILE'] gemfile = ENV.fetch('BUNDLE_GEMFILE', nil)
return gemfile if gemfile && !gemfile.empty? return gemfile if gemfile && !gemfile.empty?
File.expand_path('../../Gemfile', __FILE__) File.expand_path('../../Gemfile', __FILE__)

View file

@ -1,19 +1,19 @@
<% <%
encoding = 'unicode' encoding = 'unicode'
if ENV['OSEM_DB_ADAPTER'] == 'mysql2' if ENV.fetch('OSEM_DB_ADAPTER', nil) == 'mysql2'
encoding = 'utf8' encoding = 'utf8'
end end
%> %>
default: &default default: &default
adapter: <%= ENV['OSEM_DB_ADAPTER'] || 'postgresql' %> adapter: <%= ENV.fetch('OSEM_DB_ADAPTER', 'postgresql') %>
encoding: <%= encoding %> encoding: <%= encoding %>
host: <%= ENV['OSEM_DB_HOST'] || 'database' %> host: <%= ENV.fetch('OSEM_DB_HOST', 'database') %>
port: <%= ENV['OSEM_DB_PORT'] || '5432' %> port: <%= ENV.fetch('OSEM_DB_PORT', '5432') %>
username: <%= ENV['OSEM_DB_USER'] || 'postgres' %> username: <%= ENV.fetch('OSEM_DB_USER', 'postgres') %>
password: <%= ENV['OSEM_DB_PASSWORD'] || 'mysecretpassword' %> password: <%= ENV.fetch('OSEM_DB_PASSWORD', 'mysecretpassword') %>
database: <%= ENV['OSEM_DB_NAME'] || 'postgres' %> database: <%= ENV.fetch('OSEM_DB_NAME', 'postgres') %>
pool: 5 pool: 5
timeout: 5000 timeout: 5000

View file

@ -19,7 +19,7 @@ set :branch, OSEM_DEPLOY_BRANCH
# Shared dirs and files will be symlinked into the app-folder by the 'deploy:link_shared_paths' step. # Shared dirs and files will be symlinked into the app-folder by the 'deploy:link_shared_paths' step.
# Some plugins already add folders to shared_dirs like `mina/rails` add `public/assets`, `vendor/bundle` and many more # Some plugins already add folders to shared_dirs like `mina/rails` add `public/assets`, `vendor/bundle` and many more
# run `mina -d` to see all folders and files already included in `shared_dirs` and `shared_files` # run `mina -d` to see all folders and files already included in `shared_dirs` and `shared_files`
set :shared_dirs, fetch(:shared_dirs, []).push('public/system') set :shared_dirs, fetch(:shared_dirs, []).push('public/system', '.bundle', 'tmp/pids')
set :shared_files, fetch(:shared_files, []).push('.env.production') set :shared_files, fetch(:shared_files, []).push('.env.production')
desc "Deploys the current version to the server." desc "Deploys the current version to the server."
@ -36,8 +36,7 @@ task :deploy do
on :launch do on :launch do
in_path(fetch(:current_path)) do in_path(fetch(:current_path)) do
command %{mkdir -p tmp/} command %{sudo systemctl restart osem}
command %{touch tmp/restart.txt}
command %{sudo systemctl restart osem-dj} command %{sudo systemctl restart osem-dj}
end end
end end

View file

@ -55,7 +55,7 @@ Rails.application.configure do
# config.action_view.annotate_rendered_view_with_filenames = true # config.action_view.annotate_rendered_view_with_filenames = true
# Set the detault url for action mailer # Set the detault url for action mailer
config.action_mailer.default_url_options = { host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000') } config.action_mailer.default_url_options = { host: ENV.fetch('OSEM_HOSTNAME', 'localhost:3000') }
# Access all mails sent at http://localhost:3000/letter_opener # Access all mails sent at http://localhost:3000/letter_opener
config.action_mailer.delivery_method = :letter_opener config.action_mailer.delivery_method = :letter_opener

View file

@ -7,16 +7,16 @@ Devise.setup do |config|
# Pass each provider to User model in :omniauth_providers (for open_id providers use their name) # Pass each provider to User model in :omniauth_providers (for open_id providers use their name)
config.omniauth :open_id, name: 'suse', identifier: 'http://www.opensuse.org/openid/user' config.omniauth :open_id, name: 'suse', identifier: 'http://www.opensuse.org/openid/user'
config.omniauth :google_oauth2, (ENV['OSEM_GOOGLE_KEY'] || Rails.application.secrets.google_key), (ENV['OSEM_GOOGLE_SECRET'] || Rails.application.secrets.google_secret), config.omniauth :google_oauth2, ENV.fetch('OSEM_GOOGLE_KEY', Rails.application.secrets.google_key), ENV.fetch('OSEM_GOOGLE_SECRET', Rails.application.secrets.google_secret),
name: 'google', name: 'google',
scope: 'email' scope: 'email'
config.omniauth :facebook, (ENV['OSEM_FACEBOOK_KEY'] || Rails.application.secrets.facebook_key), (ENV['OSEM_FACEBOOK_SECRET'] || Rails.application.secrets.facebook_secret) config.omniauth :facebook, ENV.fetch('OSEM_FACEBOOK_KEY', Rails.application.secrets.facebook_key), ENV.fetch('OSEM_FACEBOOK_SECRET', Rails.application.secrets.facebook_secret)
config.omniauth :github, (ENV['OSEM_GITHUB_KEY'] || Rails.application.secrets.github_key), (ENV['OSEM_GITHUB_SECRET'] || Rails.application.secrets.github_secret) config.omniauth :github, ENV.fetch('OSEM_GITHUB_KEY', Rails.application.secrets.github_key), ENV.fetch('OSEM_GITHUB_SECRET', Rails.application.secrets.github_secret)
# ==> Mailer Configuration # ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer, # Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class with default "from" parameter. # note that it will be overwritten if you use your own mailer class with default "from" parameter.
config.mailer_sender = ENV['OSEM_EMAIL_ADDRESS'] || 'no-reply@localhost' config.mailer_sender = ENV.fetch('OSEM_EMAIL_ADDRESS', 'no-reply@localhost')
# Configure the class responsible to send e-mails. # Configure the class responsible to send e-mails.
# config.mailer = "Devise::Mailer" # config.mailer = "Devise::Mailer"

View file

@ -13,9 +13,9 @@
default: &default default: &default
id_site: <%= ENV['OSEM_PIWIK_ID'] %> id_site: <%= ENV['OSEM_PIWIK_ID'] %>
url: <%= ENV['OSEM_PIWIK_URL'] %> url: <%= ENV['OSEM_PIWIK_URL'] %>
use_async: <%= ENV['OSEM_PIWIK_ASYNC'] || false %> use_async: <%= ENV.fetch('OSEM_PIWIK_ASYNC', false) %>
disabled: <%= ENV['OSEM_PIWIK_DISABLED'] || true %> disabled: <%= ENV.fetch('OSEM_PIWIK_DISABLED', true) %>
hostname: <%= ENV['OSEM_PIWIK_HOSTNAME'] || 'localhost' %> hostname: <%= ENV.fetch('OSEM_PIWIK_HOSTNAME', 'localhost') %>
production: production:
piwik: piwik:

View file

@ -4,33 +4,27 @@
# the maximum value specified for Puma. Default is set to 5 threads for minimum # the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum; this matches the default thread size of Active Record. # and maximum; this matches the default thread size of Active Record.
# #
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } threads threads_count, threads_count
threads min_threads_count, max_threads_count
# Specifies the `worker_timeout` threshold that Puma will use to wait before
# terminating a worker in development environments.
#
worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
# Specifies the `port` that Puma will listen on to receive requests; default is 3000. # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
# #
port ENV.fetch("PORT") { 3000 } port ENV.fetch('PORT') { 3000 }
# Specifies the `environment` that Puma will run in. # Specifies the `environment` that Puma will run in.
# #
environment ENV.fetch("RAILS_ENV") { "development" } environment ENV.fetch('RAILS_ENV') { 'development' }
# Specifies the `pidfile` that Puma will use. # Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
# Specifies the number of `workers` to boot in clustered mode. # Specifies the number of `workers` to boot in clustered mode.
# Workers are forked web server processes. If using threads and workers together # Workers are forked webserver processes. If using threads and workers together
# the concurrency of the application would be max `threads` * `workers`. # the concurrency of the application would be max `threads` * `workers`.
# Workers do not work on JRuby or Windows (both of which do not support # Workers do not work on JRuby or Windows (both of which do not support
# processes). # processes).
# #
workers ENV.fetch("WEB_CONCURRENCY") { 2 } workers ENV.fetch('WEB_CONCURRENCY') { 2 }
# Use the `preload_app!` method when specifying a `workers` number. # Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code # This directive tells Puma to first boot the application and load code
@ -40,4 +34,4 @@ workers ENV.fetch("WEB_CONCURRENCY") { 2 }
preload_app! preload_app!
# Allow puma to be restarted by `rails restart` command. # Allow puma to be restarted by `rails restart` command.
plugin :tmp_restart plugin 'tmp_restart'

View file

@ -5,7 +5,7 @@ Osem::Application.routes.draw do
get '/', to: 'conferences#show' get '/', to: 'conferences#show'
end end
if ENV['OSEM_ICHAIN_ENABLED'] == 'true' if ENV.fetch('OSEM_ICHAIN_ENABLED', nil) == 'true'
devise_for :users, controllers: { registrations: :registrations } devise_for :users, controllers: { registrations: :registrations }
else else
devise_for :users, devise_for :users,
@ -225,8 +225,8 @@ Osem::Application.routes.draw do
get '/calendar' => 'conferences#calendar' get '/calendar' => 'conferences#calendar'
unless ENV['OSEM_ROOT_CONFERENCE'].blank? if ENV.fetch('OSEM_ROOT_CONFERENCE', nil)
root to: redirect("/conferences/#{ENV['OSEM_ROOT_CONFERENCE']}") root to: redirect("/conferences/#{ENV.fetch('OSEM_ROOT_CONFERENCE')}")
else else
root to: 'conferences#index', via: [:get, :options] root to: 'conferences#index', via: [:get, :options]
end end

View file

@ -32,8 +32,8 @@
# OSEM_MEMCACHED_USERNAME='root' # OSEM_MEMCACHED_USERNAME='root'
# OSEM_MEMCACHED_PASSWORD='1234' # OSEM_MEMCACHED_PASSWORD='1234'
# Set this if you want to deviate from our 'standar' ruby version # Set this if you want to deviate from our 'standard' ruby version
# OSEM_RUBY_VERSION=3.1.0 # OSEM_RUBY_VERSION=3.1.2
# What time is it? # What time is it?
# OSEM_TIME_ZONE="UTC" # OSEM_TIME_ZONE="UTC"

View file

@ -22,8 +22,8 @@ describe Admin::TracksController do
it 'assigns @tracks with the correct values' do it 'assigns @tracks with the correct values' do
expect(assigns(:tracks).length).to eq 2 expect(assigns(:tracks).length).to eq 2
expect(assigns(:tracks).include?(track)).to eq true expect(assigns(:tracks).include?(track)).to be true
expect(assigns(:tracks).include?(self_organized_track)).to eq true expect(assigns(:tracks).include?(self_organized_track)).to be true
end end
it 'renders the index template' do it 'renders the index template' do
@ -52,7 +52,7 @@ describe Admin::TracksController do
it 'assigns a new track with the correct conference' do it 'assigns a new track with the correct conference' do
expect(assigns(:track)).to be_a Track expect(assigns(:track)).to be_a Track
expect(assigns(:track).new_record?).to eq true expect(assigns(:track).new_record?).to be true
expect(assigns(:track).program_id).to eq conference.program.id expect(assigns(:track).program_id).to eq conference.program.id
end end
@ -69,7 +69,7 @@ describe Admin::TracksController do
it 'assigns a new track with the correct conference' do it 'assigns a new track with the correct conference' do
expect(assigns(:track)).to be_a Track expect(assigns(:track)).to be_a Track
expect(assigns(:track).new_record?).to eq false expect(assigns(:track).new_record?).to be false
expect(assigns(:track).program_id).to eq conference.program.id expect(assigns(:track).program_id).to eq conference.program.id
end end
@ -87,7 +87,7 @@ describe Admin::TracksController do
it 'the new track has the correct attributes' do it 'the new track has the correct attributes' do
expect(assigns(:track).state).to eq 'confirmed' expect(assigns(:track).state).to eq 'confirmed'
expect(assigns(:track).cfp_active).to eq true expect(assigns(:track).cfp_active).to be true
end end
end end
@ -99,7 +99,7 @@ describe Admin::TracksController do
it 'assigns a new track with the correct conference' do it 'assigns a new track with the correct conference' do
expect(assigns(:track)).to be_a Track expect(assigns(:track)).to be_a Track
expect(assigns(:track).new_record?).to eq true expect(assigns(:track).new_record?).to be true
expect(assigns(:track).program_id).to eq conference.program.id expect(assigns(:track).program_id).to eq conference.program.id
end end
@ -112,7 +112,7 @@ describe Admin::TracksController do
end end
it 'does not create a new track' do it 'does not create a new track' do
expect(conference.program.tracks.find_by(short_name: 'my_track')).to eq nil expect(conference.program.tracks.find_by(short_name: 'my_track')).to be_nil
end end
end end
end end
@ -199,7 +199,7 @@ describe Admin::TracksController do
end end
it 'deletes the track' do it 'deletes the track' do
expect(Track.find_by(id: track)).to eq nil expect(Track.find_by(id: track)).to be_nil
end end
end end
@ -249,7 +249,7 @@ describe Admin::TracksController do
end end
it 'becomes true' do it 'becomes true' do
expect(self_organized_track.cfp_active).to eq true expect(self_organized_track.cfp_active).to be true
end end
end end
@ -269,7 +269,7 @@ describe Admin::TracksController do
end end
it 'stays false' do it 'stays false' do
expect(self_organized_track.cfp_active).to eq false expect(self_organized_track.cfp_active).to be false
end end
end end
end end
@ -295,7 +295,7 @@ describe Admin::TracksController do
end end
it 'becomes false' do it 'becomes false' do
expect(self_organized_track.cfp_active).to eq false expect(self_organized_track.cfp_active).to be false
end end
end end
@ -315,7 +315,7 @@ describe Admin::TracksController do
end end
it 'stays true' do it 'stays true' do
expect(self_organized_track.cfp_active).to eq true expect(self_organized_track.cfp_active).to be true
end end
end end
end end

View file

@ -8,7 +8,7 @@ describe Admin::UsersController do
sign_in(admin) sign_in(admin)
end end
describe 'GET #index' do describe 'GET #index' do
xit 'sets up users array with existing users records' do it 'sets up users array with existing users records' do
user1 = create(:user, email: 'user1@email.osem') user1 = create(:user, email: 'user1@email.osem')
user2 = create(:user, email: 'user2@email.osem') user2 = create(:user, email: 'user2@email.osem')
user_deleted = User.find_by!(username: 'deleted_user') user_deleted = User.find_by!(username: 'deleted_user')
@ -25,12 +25,12 @@ describe Admin::UsersController do
user_to_confirm = create(:user, email: 'unconfirmed_user@osem.io', confirmed_at: nil) user_to_confirm = create(:user, email: 'unconfirmed_user@osem.io', confirmed_at: nil)
patch :toggle_confirmation, params: { id: user_to_confirm.id, user: { to_confirm: 'true' } } patch :toggle_confirmation, params: { id: user_to_confirm.id, user: { to_confirm: 'true' } }
user_to_confirm.reload user_to_confirm.reload
expect(user_to_confirm.confirmed?).to eq true expect(user_to_confirm.confirmed?).to be true
end end
it 'undo confirmation of user' do it 'undo confirmation of user' do
patch :toggle_confirmation, params: { id: user.id, user: { to_confirm: 'false' } } patch :toggle_confirmation, params: { id: user.id, user: { to_confirm: 'false' } }
user.reload user.reload
expect(user.confirmed?).to eq false expect(user.confirmed?).to be false
end end
end end
describe 'PATCH #update' do describe 'PATCH #update' do

View file

@ -31,7 +31,7 @@ describe Admin::VersionsController do
expect(flash[:error]).to match('The item is already in the state that you are trying to revert it back to') expect(flash[:error]).to match('The item is already in the state that you are trying to revert it back to')
end end
it 'reverting deletion of object creates it again' do it 'reverting deletion of object creates it again' do
event_type = conference.program.event_types.first event_type = conference.program.event_types.first
event_type.destroy event_type.destroy
event_types_count = conference.program.event_types.count event_types_count = conference.program.event_types.count
@ -41,7 +41,7 @@ describe Admin::VersionsController do
expect(conference.program.event_types.count).to eq(event_types_count + 1) expect(conference.program.event_types.count).to eq(event_types_count + 1)
end end
it 'reverting creation of object deletes it ' do it 'reverting creation of object deletes it' do
lodging = create(:lodging, conference: conference) lodging = create(:lodging, conference: conference)
get :revert_object, params: { id: lodging.versions.last.id } get :revert_object, params: { id: lodging.versions.last.id }
expect(lodging.versions.last.event).to eq 'destroy' expect(lodging.versions.last.event).to eq 'destroy'
@ -131,8 +131,8 @@ describe Admin::VersionsController do
sign_in @user sign_in @user
get :index, params: { conference_id: conference.short_title } get :index, params: { conference_id: conference.short_title }
expect(assigns(:versions).include?(@version_cfp)).to eq true expect(assigns(:versions).include?(@version_cfp)).to be true
expect(assigns(:versions).include?(@version_organizer)).to eq false expect(assigns(:versions).include?(@version_organizer)).to be false
end end
it 'when user has role info_desk' do it 'when user has role info_desk' do
@ -140,9 +140,9 @@ describe Admin::VersionsController do
sign_in @user sign_in @user
get :index, params: { conference_id: conference.short_title } get :index, params: { conference_id: conference.short_title }
expect(assigns(:versions).include?(@version_info_desk)).to eq true expect(assigns(:versions).include?(@version_info_desk)).to be true
expect(assigns(:versions).include?(@version_organizer)).to eq false expect(assigns(:versions).include?(@version_organizer)).to be false
expect(assigns(:versions).include?(@version_cfp)).to eq false expect(assigns(:versions).include?(@version_cfp)).to be false
end end
it 'when user has role organizer' do it 'when user has role organizer' do
@ -150,9 +150,9 @@ describe Admin::VersionsController do
sign_in @user sign_in @user
get :index, params: { conference_id: conference.short_title } get :index, params: { conference_id: conference.short_title }
expect(assigns(:versions).include?(@version_organizer)).to eq true expect(assigns(:versions).include?(@version_organizer)).to be true
expect(assigns(:versions).include?(@version_cfp)).to eq true expect(assigns(:versions).include?(@version_cfp)).to be true
expect(assigns(:versions).include?(@version_info_desk)).to eq true expect(assigns(:versions).include?(@version_info_desk)).to be true
end end
end end
end end

View file

@ -33,46 +33,5 @@ describe ApplicationController, type: :controller do
end end
end end
end end
end end
end
describe ApplicationController, type: :request do
let(:conference) { create(:conference) }
describe 'Skylight link' do
around do |example|
original_value = ENV['SKYLIGHT_PUBLIC_DASHBOARD_URL']
example.run
ENV['SKYLIGHT_PUBLIC_DASHBOARD_URL'] = original_value
end
context 'when SKYLIGHT_PUBLIC_DASHBOARD_URL is set' do
before do
ENV['SKYLIGHT_PUBLIC_DASHBOARD_URL'] = 'https://oss.skylight.io/app/applications/my-osem'
end
it 'should include a link to view performance data' do
get '/'
expect(response.body).to match(/Performance data/i)
expect(response.body).to include('https://oss.skylight.io/app/applications/my-osem')
end
end
context 'when SKYLIGHT_PUBLIC_DASHBOARD_URL is not set' do
before do
ENV['SKYLIGHT_PUBLIC_DASHBOARD_URL'] = nil
end
it 'should not include a link to view performance data' do
get '/'
expect(response.body).to_not match(/performance data/i)
expect(response.body).to_not match(/skylight/i)
end
end
end
end end

View file

@ -13,7 +13,7 @@ describe ConfirmationsController do
it 'confirms and signs in user' do it 'confirms and signs in user' do
get :show, params: { confirmation_token: user.confirmation_token } get :show, params: { confirmation_token: user.confirmation_token }
user.reload user.reload
expect(user.confirmed?).to eq true expect(user.confirmed?).to be true
expect(controller.current_user).to eq user expect(controller.current_user).to eq user
end end
end end
@ -24,7 +24,7 @@ describe ConfirmationsController do
it 'confirms user' do it 'confirms user' do
get :show, params: { confirmation_token: user.confirmation_token } get :show, params: { confirmation_token: user.confirmation_token }
user.reload user.reload
expect(user.confirmed?).to eq true expect(user.confirmed?).to be true
end end
end end
end end

View file

@ -20,8 +20,8 @@ describe TracksController do
it 'assigns @tracks with the correct values' do it 'assigns @tracks with the correct values' do
expect(assigns(:tracks).length).to eq 1 expect(assigns(:tracks).length).to eq 1
expect(assigns(:tracks).include?(regular_track)).to eq false expect(assigns(:tracks).include?(regular_track)).to be false
expect(assigns(:tracks).include?(self_organized_track)).to eq true expect(assigns(:tracks).include?(self_organized_track)).to be true
end end
it 'renders the index template' do it 'renders the index template' do
@ -50,7 +50,7 @@ describe TracksController do
it 'assigns a new track with the correct conference' do it 'assigns a new track with the correct conference' do
expect(assigns(:track)).to be_a Track expect(assigns(:track)).to be_a Track
expect(assigns(:track).new_record?).to eq true expect(assigns(:track).new_record?).to be true
expect(assigns(:track).program_id).to eq conference.program.id expect(assigns(:track).program_id).to eq conference.program.id
end end
@ -74,14 +74,14 @@ describe TracksController do
end end
it 'creates new track' do it 'creates new track' do
expect(assigns(:track).new_record?).to eq false expect(assigns(:track).new_record?).to be false
end end
it 'the new tracks has the correct attributes' do it 'the new tracks has the correct attributes' do
expect(assigns(:track).program_id).to eq conference.program.id expect(assigns(:track).program_id).to eq conference.program.id
expect(assigns(:track).submitter).to eq user expect(assigns(:track).submitter).to eq user
expect(assigns(:track).state).to eq 'new' expect(assigns(:track).state).to eq 'new'
expect(assigns(:track).cfp_active).to eq false expect(assigns(:track).cfp_active).to be false
end end
end end
@ -93,7 +93,7 @@ describe TracksController do
it 'assigns a new track with the correct conference' do it 'assigns a new track with the correct conference' do
expect(assigns(:track)).to be_a Track expect(assigns(:track)).to be_a Track
expect(assigns(:track).new_record?).to eq true expect(assigns(:track).new_record?).to be true
expect(assigns(:track).program_id).to eq conference.program.id expect(assigns(:track).program_id).to eq conference.program.id
end end
@ -106,7 +106,7 @@ describe TracksController do
end end
it 'does not create a new track' do it 'does not create a new track' do
expect(conference.program.tracks.find_by(short_name: 'my_track')).to eq nil expect(conference.program.tracks.find_by(short_name: 'my_track')).to be_nil
end end
end end
end end

View file

@ -4,7 +4,7 @@ require 'spec_helper'
describe UserDatatable do describe UserDatatable do
subject! do subject! do
described_class.new(view) described_class.new({}, view_context: view)
end end
let(:data_cols) do let(:data_cols) do
@ -95,22 +95,18 @@ describe UserDatatable do
let(:output) { subject.as_json } let(:output) { subject.as_json }
it 'recordsTotal' do it 'recordsTotal' do
skip('This fails since Ruby 2.5.8')
expect(output[:recordsTotal]).to eq(1) expect(output[:recordsTotal]).to eq(1)
end end
it 'recordsFiltered' do it 'recordsFiltered' do
skip('This fails since Ruby 2.5.8')
expect(output[:recordsFiltered]).to eq(1) expect(output[:recordsFiltered]).to eq(1)
end end
it 'data length' do it 'data length' do
skip('This fails since Ruby 2.5.8')
expect(output[:data].length).to eq(1) expect(output[:data].length).to eq(1)
end end
it 'has expected data columns' do it 'has expected data columns' do
skip('This fails since Ruby 2.5.8')
expect(output[:data].first.keys).to eq(data_cols) expect(output[:data].first.keys).to eq(data_cols)
end end
@ -118,32 +114,26 @@ describe UserDatatable do
let(:user_data) { output[:data].first } let(:user_data) { output[:data].first }
it 'id' do it 'id' do
skip('This fails since Ruby 2.5.8')
expect(user_data[:id].to_i).to eq(user.id) expect(user_data[:id].to_i).to eq(user.id)
end end
it 'name' do it 'name' do
skip('This fails since Ruby 2.5.8')
expect(user_data[:name]).to eq(user.name) expect(user_data[:name]).to eq(user.name)
end end
it 'email' do it 'email' do
skip('This fails since Ruby 2.5.8')
expect(user_data[:email]).to eq(user.email) expect(user_data[:email]).to eq(user.email)
end end
it 'confirmed_at' do it 'confirmed_at' do
skip('This fails since Ruby 2.5.8')
expect(Date.parse(user_data[:confirmed_at])).to eq(user.confirmed_at.to_date) expect(Date.parse(user_data[:confirmed_at])).to eq(user.confirmed_at.to_date)
end end
it 'attended' do it 'attended' do
skip('This fails since Ruby 2.5.8')
expect(user_data[:attended].to_i).to eq(user.attended_count) expect(user_data[:attended].to_i).to eq(user.attended_count)
end end
it 'roles' do it 'roles' do
skip('This fails since Ruby 2.5.8')
expect(user_data[:roles]).to eq('None') expect(user_data[:roles]).to eq('None')
end end
end end

View file

@ -3,8 +3,6 @@
FactoryBot.define do FactoryBot.define do
factory :survey do factory :survey do
title { 'This is my survey' } title { 'This is my survey' }
start_date { Date.current - 1.day }
end_date { Date.current + 1.day }
factory :conference_survey do factory :conference_survey do
association :surveyable, factory: :conference association :surveyable, factory: :conference

View file

@ -19,7 +19,7 @@ feature 'BaseController' do
end end
end end
context 'when user is ' do context 'when user is' do
before(:each) do before(:each) do
sign_in(user) sign_in(user)
end end

View file

@ -34,7 +34,7 @@ feature Conference do
expect(Conference.count).to eq(expected_count) expect(Conference.count).to eq(expected_count)
expect(Conference.last.organization).to eq(organization) expect(Conference.last.organization).to eq(organization)
user.reload user.reload
expect(user.has_cached_role? :organizer, Conference.last).to eq(true) expect(user.has_cached_role? :organizer, Conference.last).to be(true)
end end
scenario 'update conference', feature: true, js: true do scenario 'update conference', feature: true, js: true do

View file

@ -71,7 +71,7 @@ feature Openid do
expect(flash).to eq('test-participant-1@example.com signed in successfully with google') expect(flash).to eq('test-participant-1@example.com signed in successfully with google')
expect(Openid.count).to eq(expected_count_openid) expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user) expect(User.count).to eq(expected_count_user)
expect(Openid.where(email: 'test-1@example.com').first.nil?).to eq(false) expect(Openid.where(email: 'test-1@example.com').first.nil?).to be(false)
end end
scenario 'signs in with openID using the same email as another associated openid' do scenario 'signs in with openID using the same email as another associated openid' do
@ -105,8 +105,8 @@ feature Openid do
page.find('#flash .close').click page.find('#flash .close').click
expect(Openid.count).to eq(expected_count_openid) expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user) expect(User.count).to eq(expected_count_user)
expect(Openid.where(email: 'test-participant-1@example.com').first.nil?).to eq(false) expect(Openid.where(email: 'test-participant-1@example.com').first.nil?).to be(false)
expect(Openid.where(email: 'test-1@example.com').first.nil?).to eq(false) expect(Openid.where(email: 'test-1@example.com').first.nil?).to be(false)
# Sign in with different openID using same email (test-1@gmail.com) # Sign in with different openID using same email (test-1@gmail.com)
sign_out sign_out
@ -131,8 +131,8 @@ feature Openid do
shared_examples 'sign up with openid' do |provider| shared_examples 'sign up with openid' do |provider|
scenario "has option to sign in with #{provider}" do scenario "has option to sign in with #{provider}" do
visit '/accounts/sign_up' visit '/accounts/sign_up'
expect(page.has_content?('or sign in using')).to eq true expect(page.has_content?('or sign in using')).to be true
expect(page.has_link?("omniauth-#{provider}")).to eq true expect(page.has_link?("omniauth-#{provider}")).to be true
end end
scenario "sign up with #{provider}" do scenario "sign up with #{provider}" do

View file

@ -37,7 +37,7 @@ feature Role do
visit admin_conference_roles_path(conference.short_title) visit admin_conference_roles_path(conference.short_title)
end end
scenario "role #{role_name}" do scenario "role #{role_name}" do
expect(page.has_link?('Edit', href: edit_admin_conference_role_path(conference.short_title, role_name))).to eq false expect(page.has_link?('Edit', href: edit_admin_conference_role_path(conference.short_title, role_name))).to be false
end end
end end
@ -60,7 +60,7 @@ feature Role do
click_button 'Add' click_button 'Add'
user_with_no_role.reload user_with_no_role.reload
expect(user_with_no_role.has_cached_role?(role.name, conference)).to eq true expect(user_with_no_role.has_cached_role?(role.name, conference)).to be true
end end
scenario "removes role #{role_name}", feature: true, js: true do scenario "removes role #{role_name}", feature: true, js: true do
@ -72,7 +72,7 @@ feature Role do
expect(page).to have_css('.alert', text: "Successfully removed role #{role_name} from user #{user_with_role.email}") expect(page).to have_css('.alert', text: "Successfully removed role #{role_name} from user #{user_with_role.email}")
expect(by_role_name).to eq(role_name) | eq('organizer') expect(by_role_name).to eq(role_name) | eq('organizer')
user_with_role.reload user_with_role.reload
expect(user_with_role.has_cached_role?(role_name, conference)).to eq false expect(user_with_role.has_cached_role?(role_name, conference)).to be false
end end
end end
@ -91,13 +91,13 @@ feature Role do
scenario "add role #{role_name}", feature: true, js: true do scenario "add role #{role_name}", feature: true, js: true do
click_link('Users', href: admin_conference_role_path(conference.short_title, role_name)) click_link('Users', href: admin_conference_role_path(conference.short_title, role_name))
expect(page.has_field?('user_email')).to eq false expect(page.has_field?('user_email')).to be false
end end
scenario "remove role #{role_name}", feature: true, js: true do scenario "remove role #{role_name}", feature: true, js: true do
click_link('Users', href: admin_conference_role_path(conference.short_title, role_name)) click_link('Users', href: admin_conference_role_path(conference.short_title, role_name))
expect(first('td').has_css?('.bootstrap-switch-container')).to eq false expect(first('td').has_css?('.bootstrap-switch-container')).to be false
end end
end end
@ -121,7 +121,7 @@ feature Role do
click_button 'Add' click_button 'Add'
user_with_no_role.reload user_with_no_role.reload
expect(user_with_no_role.has_cached_role?('organization_admin', organization)).to eq true expect(user_with_no_role.has_cached_role?('organization_admin', organization)).to be true
end end
scenario 'successfully removes role organization_admin' do scenario 'successfully removes role organization_admin' do
@ -129,7 +129,7 @@ feature Role do
first('tr').find('.btn-danger').click first('tr').find('.btn-danger').click
organization_admin.reload organization_admin.reload
expect(organization_admin.has_cached_role?('organization_admin', organization)).to eq false expect(organization_admin.has_cached_role?('organization_admin', organization)).to be false
end end
end end
@ -137,12 +137,12 @@ feature Role do
scenario 'does not successfully add role organization_admin' do scenario 'does not successfully add role organization_admin' do
click_link('Admins', href: admins_admin_organization_path(other_organization.id)) click_link('Admins', href: admins_admin_organization_path(other_organization.id))
expect(page.has_field?('user_email')).to eq false expect(page.has_field?('user_email')).to be false
end end
scenario 'does not successfully removes role organization_admin' do scenario 'does not successfully removes role organization_admin' do
click_link('Admins', href: admins_admin_organization_path(other_organization.id)) click_link('Admins', href: admins_admin_organization_path(other_organization.id))
expect(page.has_css?('.btn-danger')).to eq false expect(page.has_css?('.btn-danger')).to be false
end end
end end
end end

View file

@ -0,0 +1,55 @@
# frozen_string_literal: true
require 'spec_helper'
feature Survey do
let(:conference) { create(:conference) }
context 'as an organizer' do
let(:organizer) { create(:organizer, resource: conference) }
before :each do
sign_in organizer
end
scenario 'create a survey', feature: true, js: true do
visit admin_conference_path(conference)
click_link 'Surveys'
click_link 'New'
fill_in 'Title', with: 'Example Survey'
click_button 'Create Survey'
expect(flash).to eq('Successfully created survey')
fill_in :survey_question_title, with: 'Example question'
select 'boolean', from: 'Type of Question:', visible: false # Hidden by bootstrap-select
click_button 'Create Survey question'
expect(flash).to eq('Successfully created Survey Question.')
end
end
context 'as an attendee' do
let(:attendee) { create(:user) }
before :each do
sign_in attendee
end
scenario 'respond to a survey during registration', feature: true, js: true do
create :registration_period, conference: conference
create :registration, conference: conference, user: attendee
survey = create(:survey, surveyable: conference, target: :during_registration)
create :boolean_mandatory, survey: survey
visit conference_conference_registration_path(conference)
expect(find(:link, survey.title).sibling('.fa')[:title]).to eq('Please fill out the survey')
click_link survey.title
choose 'Yes'
click_button 'Submit'
expect(flash).to eq('Successfully responded to survey.')
visit conference_conference_registration_path(conference)
expect(find(:link, survey.title).sibling('.fa')[:title]).to eq('Thank you for filling out the survey')
end
end
end

View file

@ -90,8 +90,8 @@ feature Track do
expected.to change { Track.count }.by 1 expected.to change { Track.count }.by 1
expect(flash).to eq('Track request successfully created.') expect(flash).to eq('Track request successfully created.')
within('table#tracks') do within('table#tracks') do
expect(page.has_content?('Distribution')).to eq true expect(page.has_content?('Distribution')).to be true
expect(page.has_content?('Events about our Linux dist...')).to eq true expect(page.has_content?('Events about our Linux dist...')).to be true
end end
end end
@ -111,8 +111,8 @@ feature Track do
expected.to_not(change { Track.count }) expected.to_not(change { Track.count })
expect(flash).to eq("Track #{track.name} withdrawn.") expect(flash).to eq("Track #{track.name} withdrawn.")
within('table#tracks') do within('table#tracks') do
expect(page.has_content?(track.name)).to eq true expect(page.has_content?(track.name)).to be true
expect(page.has_link?('Re-Submit')).to eq true expect(page.has_link?('Re-Submit')).to be true
end end
end end
@ -134,8 +134,8 @@ feature Track do
expected.to_not(change { Track.count }) expected.to_not(change { Track.count })
expect(flash).to eq('Track request successfully updated.') expect(flash).to eq('Track request successfully updated.')
within('table#tracks') do within('table#tracks') do
expect(page.has_content?('Distribution')).to eq true expect(page.has_content?('Distribution')).to be true
expect(page.has_content?('Events about our Linux dist...')).to eq true expect(page.has_content?('Events about our Linux dist...')).to be true
end end
end end
end end

View file

@ -231,30 +231,31 @@ feature 'Version' do
expect(page).to have_text("Someone (probably via the console) deleted difficulty level Expert with ID #{difficulty_level_id} in conference #{conference.short_title}") expect(page).to have_text("Someone (probably via the console) deleted difficulty level Expert with ID #{difficulty_level_id} in conference #{conference.short_title}")
end end
xscenario 'display changes in splashpages', feature: true, versioning: true, js: true do scenario 'display changes in splashpages', feature: true, versioning: true, js: true do
visit admin_conference_splashpage_path(conference.short_title) visit admin_conference_splashpage_path(conference.short_title)
click_link 'Create Splashpage' click_link 'Create Splashpage'
click_button 'Save Changes' click_button 'Save'
click_link 'Edit' click_link 'Configure'
uncheck('Display the program') check('Display the program?')
uncheck('Display call for papers and call for tracks, while open') check('Display call for papers and call for tracks?')
uncheck('Display the venue') check('Display the venue?')
uncheck('Display tickets') check('Display the tickets?')
uncheck('Display the lodgings') check('Display the lodgings?')
uncheck('Display sponsors') check('Display the sponsors?')
uncheck('Display social media links') check('Display the social media links?')
check('Make splash page public?') check('Make splash page public?')
click_button 'Save Changes' click_button 'Save'
splashpage_id = conference.splashpage.id
click_link 'Delete' click_link 'Delete'
page.accept_alert page.accept_alert
expect(page).to have_text('Splashpage was successfully destroyed') expect(page).to have_text('Splashpage was successfully destroyed')
visit admin_revision_history_path visit admin_revision_history_path
expect(page).to have_text("#{organizer.name} created new splashpage in conference #{conference.short_title}") expect(page).to have_text("#{organizer.name} created new splashpage with ID #{splashpage_id} in conference #{conference.short_title}")
expect(page).to have_text("#{organizer.name} updated public, include program, include cfp, include venue, include tickets, include lodgings, include sponsors and include social media of splashpage in conference #{conference.short_title}") expect(page).to have_text("#{organizer.name} updated public, include program, include social media, include venue, include tickets, include sponsors, include lodgings and include cfp of splashpage with ID #{splashpage_id} in conference #{conference.short_title}")
expect(page).to have_text("#{organizer.name} deleted splashpage in conference #{conference.short_title}") expect(page).to have_text("#{organizer.name} deleted splashpage with ID #{splashpage_id} in conference #{conference.short_title}")
end end
scenario 'displays users subscribe/unsubscribe to conferences', feature: true, versioning: true, js: true do scenario 'displays users subscribe/unsubscribe to conferences', feature: true, versioning: true, js: true do
@ -344,7 +345,6 @@ feature 'Version' do
end end
scenario 'display changes in users_role for conference role', feature: true, versioning: true, js: true do scenario 'display changes in users_role for conference role', feature: true, versioning: true, js: true do
skip('fails since paper_trail 12.2.0')
user = create(:user) user = create(:user)
role = Role.find_by(name: 'cfp', resource_id: conference.id, resource_type: 'Conference') role = Role.find_by(name: 'cfp', resource_id: conference.id, resource_type: 'Conference')
user.add_role :cfp, conference user.add_role :cfp, conference

View file

@ -36,29 +36,29 @@ describe ApplicationHelper, type: :helper do
describe 'does return correct concurrent events' do describe 'does return correct concurrent events' do
it 'when events starts at the same time' do it 'when events starts at the same time' do
expect(concurrent_events(event).include?(@other_event)).to eq true expect(concurrent_events(event).include?(@other_event)).to be true
end end
it 'when event is in between the other event' do it 'when event is in between the other event' do
@event_schedule.update_attribute(:start_time, @other_event_schedule.start_time + 10.minutes) @event_schedule.update_attribute(:start_time, @other_event_schedule.start_time + 10.minutes)
expect(concurrent_events(event).include?(@other_event)).to eq true expect(concurrent_events(event).include?(@other_event)).to be true
end end
end end
describe 'does not return as concurrent event ' do describe 'does not return as concurrent event' do
it 'when event is not scheduled' do it 'when event is not scheduled' do
@event_schedule.destroy @event_schedule.destroy
expect(concurrent_events(event).present?).to eq false expect(concurrent_events(event).present?).to be false
end end
it 'when one event starts and other ends at the same time' do it 'when one event starts and other ends at the same time' do
@event_schedule.update_attribute(:start_time, @other_event_schedule.end_time) @event_schedule.update_attribute(:start_time, @other_event_schedule.end_time)
expect(concurrent_events(event).present?).to eq false expect(concurrent_events(event).present?).to be false
end end
it 'when conference program does not have a selected schedule' do it 'when conference program does not have a selected schedule' do
conference.program.update_attribute(:selected_schedule_id, nil) conference.program.update_attribute(:selected_schedule_id, nil)
expect(concurrent_events(event).present?).to eq false expect(concurrent_events(event).present?).to be false
end end
end end
@ -68,11 +68,6 @@ describe ApplicationHelper, type: :helper do
expect(nav_root_link_for(nil)).to match 'OSEM' expect(nav_root_link_for(nil)).to match 'OSEM'
end end
it 'should use the environment variable' do
ENV['OSEM_NAME'] = Faker::Company.name + "'"
expect(nav_root_link_for(nil)).to match h(ENV['OSEM_NAME'])
end
it 'should use the conference organization name' do it 'should use the conference organization name' do
expect(nav_root_link_for(conference)).to match h(conference.organization.name) expect(nav_root_link_for(conference)).to match h(conference.organization.name)
end end

View file

@ -6,7 +6,7 @@ describe DateTimeHelper, type: :helper do
describe 'format_datetime' do describe 'format_datetime' do
it 'returns nothing if there is no parameter' do it 'returns nothing if there is no parameter' do
expect(format_datetime(nil)).to eq nil expect(format_datetime(nil)).to be_nil
end end
it 'returns formatted string' do it 'returns formatted string' do

View file

@ -9,11 +9,11 @@ describe FormatHelper, type: :helper do
expect(markdown(nil)).to eq '' expect(markdown(nil)).to eq ''
end end
it 'should return HTML for header markdown' do it "doesn't render links with unsafe URI schemes" do
expect(Redcarpet::Markdown).to receive(:new) expect(markdown('[a](javascript:b)')).to eq "<p>[a](javascript:b)</p>\n"
.with(Redcarpet::Render::HTML, autolink: true, space_after_headers: true, no_intra_emphasis: true, fenced_code_blocks: true, disable_indented_code_blocks: true, safe_links_only: true) end
.and_call_original
it 'should return HTML for header markdown' do
expect(markdown('# this is my header')).to eq "<h1>this is my header</h1>\n" expect(markdown('# this is my header')).to eq "<h1>this is my header</h1>\n"
end end
end end

View file

@ -21,7 +21,7 @@ describe Cfp do
it 'returns nil when the cfp for events doesn\'t exist' do it 'returns nil when the cfp for events doesn\'t exist' do
cfp.destroy! cfp.destroy!
expect(conference.program.cfps.for_events).to eq nil expect(conference.program.cfps.for_events).to be_nil
end end
end end
@ -32,7 +32,7 @@ describe Cfp do
end end
it 'returns nil when the cfp for tracks doesn\'t exist' do it 'returns nil when the cfp for tracks doesn\'t exist' do
expect(conference.program.cfps.for_tracks).to eq nil expect(conference.program.cfps.for_tracks).to be_nil
end end
end end
@ -81,24 +81,24 @@ describe Cfp do
describe 'returns true' do describe 'returns true' do
it 'when end_date changed' do it 'when end_date changed' do
cfp.end_date = Date.today cfp.end_date = Date.today
expect(cfp.start_date_changed?).to eq false expect(cfp.start_date_changed?).to be false
expect(cfp.end_date_changed?).to eq true expect(cfp.end_date_changed?).to be true
expect(cfp.notify_on_cfp_date_update?).to eq true expect(cfp.notify_on_cfp_date_update?).to be true
end end
it 'when start_date changed' do it 'when start_date changed' do
cfp.start_date = Date.today cfp.start_date = Date.today
expect(cfp.end_date_changed?).to eq false expect(cfp.end_date_changed?).to be false
expect(cfp.start_date_changed?).to eq true expect(cfp.start_date_changed?).to be true
expect(cfp.notify_on_cfp_date_update?).to eq true expect(cfp.notify_on_cfp_date_update?).to be true
end end
end end
describe 'returns false' do describe 'returns false' do
it 'when there is no change in cfp dates' do it 'when there is no change in cfp dates' do
expect(cfp.start_date_changed?).to eq false expect(cfp.start_date_changed?).to be false
expect(cfp.end_date_changed?).to eq false expect(cfp.end_date_changed?).to be false
expect(cfp.notify_on_cfp_date_update?).to eq false expect(cfp.notify_on_cfp_date_update?).to be false
end end
it 'when send_on_cfp_dates_updates is not set' do it 'when send_on_cfp_dates_updates is not set' do
@ -106,8 +106,8 @@ describe Cfp do
conference.email_settings.save! conference.email_settings.save!
cfp.end_date = Date.today cfp.end_date = Date.today
expect(cfp.end_date_changed?).to eq true expect(cfp.end_date_changed?).to be true
expect(cfp.notify_on_cfp_date_update?).to eq false expect(cfp.notify_on_cfp_date_update?).to be false
end end
it 'when cfp_dates_updates_subject is not set' do it 'when cfp_dates_updates_subject is not set' do
@ -115,8 +115,8 @@ describe Cfp do
conference.email_settings.save! conference.email_settings.save!
cfp.end_date = Date.today cfp.end_date = Date.today
expect(cfp.end_date_changed?).to eq true expect(cfp.end_date_changed?).to be true
expect(cfp.notify_on_cfp_date_update?).to eq false expect(cfp.notify_on_cfp_date_update?).to be false
end end
it 'when cfp_dates_updates_template is not set' do it 'when cfp_dates_updates_template is not set' do
@ -124,8 +124,8 @@ describe Cfp do
conference.email_settings.save! conference.email_settings.save!
cfp.end_date = Date.today cfp.end_date = Date.today
expect(cfp.end_date_changed?).to eq true expect(cfp.end_date_changed?).to be true
expect(cfp.notify_on_cfp_date_update?).to eq false expect(cfp.notify_on_cfp_date_update?).to be false
end end
end end
end end
@ -135,13 +135,13 @@ describe Cfp do
it 'when start and end dates are in the past' do it 'when start and end dates are in the past' do
cfp.start_date = Date.current - 3 cfp.start_date = Date.current - 3
cfp.end_date = Date.current - 1 cfp.end_date = Date.current - 1
expect(cfp.open?).to eq(false) expect(cfp.open?).to be(false)
end end
it 'when start and end dates are in the future' do it 'when start and end dates are in the future' do
cfp.start_date = Date.current + 1 cfp.start_date = Date.current + 1
cfp.end_date = Date.current + 3 cfp.end_date = Date.current + 3
expect(cfp.open?).to eq(false) expect(cfp.open?).to be(false)
end end
end end
@ -149,7 +149,7 @@ describe Cfp do
it 'when start date is in the past and end date is in the future' do it 'when start date is in the past and end date is in the future' do
cfp.start_date = Date.current - 1 cfp.start_date = Date.current - 1
cfp.end_date = Date.current + 1 cfp.end_date = Date.current + 1
expect(cfp.open?).to eq(true) expect(cfp.open?).to be(true)
end end
end end
end end

View file

@ -8,12 +8,12 @@ describe Commercial do
it 'validates url format' do it 'validates url format' do
commercial = build(:conference_commercial, url: 'ftp://example.com') commercial = build(:conference_commercial, url: 'ftp://example.com')
expect(commercial.valid?).to eq false expect(commercial.valid?).to be false
expect(commercial.errors['url']).to eq ['is invalid'] expect(commercial.errors['url']).to eq ['is invalid']
end end
it 'validates url rendering' do it 'validates url rendering' do
commercial = build(:conference_commercial) commercial = build(:conference_commercial)
expect(commercial.valid?).to eq true expect(commercial.valid?).to be true
end end
end end

View file

@ -5,22 +5,22 @@ require 'spec_helper'
context 'Delegation' do context 'Delegation' do
subject do subject do
FactoryBot.create(:conference, start_date: 1.month.from_now, end_date: 2.month.from_now) create(:conference, start_date: 1.month.from_now, end_date: 2.month.from_now)
end end
context 'Venue' do context 'Venue' do
context 'when venue has not been set' do context 'when venue has not been set' do
it 'the accessors should be nil' do it 'the accessors should be nil' do
expect(subject.city).to eq(nil) expect(subject.city).to be_nil
expect(subject.country_name).to eq(nil) expect(subject.country_name).to be_nil
expect(subject.venue_name).to eq(nil) expect(subject.venue_name).to be_nil
expect(subject.venue_street).to eq(nil) expect(subject.venue_street).to be_nil
end end
end end
context 'when venue has been set' do context 'when venue has been set' do
it 'should delegate to venue' do it 'should delegate to venue' do
venue = FactoryBot.create(:venue) venue = create(:venue)
subject.update(venue: venue) subject.update(venue: venue)
expect(subject.city).to eq(venue.city) expect(subject.city).to eq(venue.city)
expect(subject.country_name).to eq(venue.country_name) expect(subject.country_name).to eq(venue.country_name)
@ -33,7 +33,7 @@ end
describe Conference do describe Conference do
let(:subject) { create(:conference, start_date: Date.new(2014, 06, 30), end_date: Date.new(2014, 06, 30)) } subject(:test_subject) { create(:conference, start_date: Date.new(2014, 06, 30), end_date: Date.new(2014, 06, 30)) }
describe '#write_event_distribution_to_db' do describe '#write_event_distribution_to_db' do
@ -744,7 +744,7 @@ describe Conference do
end end
describe '#get_submission_line_colors' do describe '#get_submission_line_colors' do
it ' returns correct values' do it 'returns correct values' do
result = [] result = []
result.push(short_title: 'Submitted', color: 'blue') result.push(short_title: 'Submitted', color: 'blue')
result.push(short_title: 'Confirmed', color: 'green') result.push(short_title: 'Confirmed', color: 'green')

View file

@ -21,7 +21,7 @@ describe EventSchedule do
context 'is invalid' do context 'is invalid' do
it 'when event schedule start_time is after the conference end_hour, and returns an error message' do it 'when event schedule start_time is after the conference end_hour, and returns an error message' do
new_scheduled_event = build(:event_scheduled, program: conference.program, hour: conference.start_date + conference.end_hour.hours + 1.hour) new_scheduled_event = build(:event_scheduled, program: conference.program, hour: conference.start_date + conference.end_hour.hours + 1.hour)
expect(new_scheduled_event.valid?).to eq false expect(new_scheduled_event.valid?).to be false
expect(new_scheduled_event.event_schedules.first.errors[:start_time]).to eq ["can't be after the conference end hour (#{conference.end_hour})"] expect(new_scheduled_event.event_schedules.first.errors[:start_time]).to eq ["can't be after the conference end hour (#{conference.end_hour})"]
end end
end end
@ -29,7 +29,7 @@ describe EventSchedule do
context 'is valid' do context 'is valid' do
it 'when event schedule start_time is between the conference end_hour and start_hour' do it 'when event schedule start_time is between the conference end_hour and start_hour' do
new_scheduled_event = build(:event_scheduled, program: conference.program, hour: conference.start_date + conference.end_hour.hours - 1.hour) new_scheduled_event = build(:event_scheduled, program: conference.program, hour: conference.start_date + conference.end_hour.hours - 1.hour)
expect(new_scheduled_event.valid?).to eq true expect(new_scheduled_event.valid?).to be true
end end
end end
end end
@ -38,7 +38,7 @@ describe EventSchedule do
context 'is invalid' do context 'is invalid' do
it 'when event schedule start_time is before the conference start_hour, and returns an error message' do it 'when event schedule start_time is before the conference start_hour, and returns an error message' do
new_scheduled_event = build(:event_scheduled, program: conference.program, hour: conference.start_date) new_scheduled_event = build(:event_scheduled, program: conference.program, hour: conference.start_date)
expect(new_scheduled_event.valid?).to eq false expect(new_scheduled_event.valid?).to be false
expect(new_scheduled_event.event_schedules.first.errors[:start_time]).to eq ["can't be before the conference start hour (#{conference.start_hour})"] expect(new_scheduled_event.event_schedules.first.errors[:start_time]).to eq ["can't be before the conference start hour (#{conference.start_hour})"]
end end
end end
@ -56,21 +56,21 @@ describe EventSchedule do
context 'is valid' do context 'is valid' do
it 'when scheduled in the track\'s room' do it 'when scheduled in the track\'s room' do
event_schedule = build(:event_schedule, event: @event, room: @room) event_schedule = build(:event_schedule, event: @event, room: @room)
expect(event_schedule.valid?).to eq true expect(event_schedule.valid?).to be true
end end
it 'when the track doesn\'t have a room' do it 'when the track doesn\'t have a room' do
@track.room = nil @track.room = nil
@track.save! @track.save!
event_schedule = build(:event_schedule, event: @event) event_schedule = build(:event_schedule, event: @event)
expect(event_schedule.valid?).to eq true expect(event_schedule.valid?).to be true
end end
end end
context 'is invalid' do context 'is invalid' do
it 'when scheduled in different room than the track\'s' do it 'when scheduled in different room than the track\'s' do
event_schedule = build(:event_schedule, event: @event) event_schedule = build(:event_schedule, event: @event)
expect(event_schedule.valid?).to eq false expect(event_schedule.valid?).to be false
expect(event_schedule.errors[:room]).to eq ["must be the same as the track's room (#{@room.name})"] expect(event_schedule.errors[:room]).to eq ["must be the same as the track's room (#{@room.name})"]
end end
end end
@ -88,20 +88,20 @@ describe EventSchedule do
context 'is valid' do context 'is valid' do
it 'when scheduled during the track\'s time slot' do it 'when scheduled during the track\'s time slot' do
event_schedule = build(:event_schedule, event: @event, room: @room, start_time: Date.current + 3.hours) event_schedule = build(:event_schedule, event: @event, room: @room, start_time: Date.current + 3.hours)
expect(event_schedule.valid?).to eq true expect(event_schedule.valid?).to be true
end end
end end
context 'is invalid' do context 'is invalid' do
it 'when scheduled before the track\'s start date' do it 'when scheduled before the track\'s start date' do
event_schedule = build(:event_schedule, event: @event, room: @room, start_time: Date.current - 1.hour) event_schedule = build(:event_schedule, event: @event, room: @room, start_time: Date.current - 1.hour)
expect(event_schedule.valid?).to eq false expect(event_schedule.valid?).to be false
expect(event_schedule.errors[:start_time]).to eq ["can't be before the track's start date (#{@track.start_date})"] expect(event_schedule.errors[:start_time]).to eq ["can't be before the track's start date (#{@track.start_date})"]
end end
it 'when event ends after the track\'s end date' do it 'when event ends after the track\'s end date' do
event_schedule = build(:event_schedule, event: @event, room: @room, start_time: Date.current + 1.day - 10.minutes) event_schedule = build(:event_schedule, event: @event, room: @room, start_time: Date.current + 1.day - 10.minutes)
expect(event_schedule.valid?).to eq false expect(event_schedule.valid?).to be false
expect(event_schedule.errors[:end_time]).to eq ["can't be after the track's end date (#{@track.end_date})"] expect(event_schedule.errors[:end_time]).to eq ["can't be after the track's end date (#{@track.end_date})"]
end end
end end
@ -119,7 +119,7 @@ describe EventSchedule do
it 'when the event belongs to a self-organized track and is scheduled in one of its track\'s schedules' do it 'when the event belongs to a self-organized track and is scheduled in one of its track\'s schedules' do
schedule = create(:schedule, program: conference.program, track: @event.track) schedule = create(:schedule, program: conference.program, track: @event.track)
event_schedule = build(:event_schedule, event: @event, room: @room, schedule: schedule) event_schedule = build(:event_schedule, event: @event, room: @room, schedule: schedule)
expect(event_schedule.valid?).to eq true expect(event_schedule.valid?).to be true
expect(event_schedule.errors[:schedule]).to eq [] expect(event_schedule.errors[:schedule]).to eq []
end end
@ -127,7 +127,7 @@ describe EventSchedule do
@event.track = nil @event.track = nil
@event.save! @event.save!
event_schedule = build(:event_schedule, event: @event, room: @room) event_schedule = build(:event_schedule, event: @event, room: @room)
expect(event_schedule.valid?).to eq true expect(event_schedule.valid?).to be true
expect(event_schedule.errors[:schedule]).to eq [] expect(event_schedule.errors[:schedule]).to eq []
end end
end end
@ -135,7 +135,7 @@ describe EventSchedule do
context 'is invalid' do context 'is invalid' do
it 'when the event belongs to a self_organized track but isn\'t scheduled in one of its schedules' do it 'when the event belongs to a self_organized track but isn\'t scheduled in one of its schedules' do
event_schedule = build(:event_schedule, event: @event, room: @room) event_schedule = build(:event_schedule, event: @event, room: @room)
expect(event_schedule.valid?).to eq false expect(event_schedule.valid?).to be false
expect(event_schedule.errors[:schedule]).to eq ['must be one of My awesome track track\'s schedules'] expect(event_schedule.errors[:schedule]).to eq ['must be one of My awesome track track\'s schedules']
end end
end end

View file

@ -35,14 +35,14 @@ describe Event do
it 'it is valid, if max_attendees is less than room size' do it 'it is valid, if max_attendees is less than room size' do
event.max_attendees = 2 event.max_attendees = 2
expect(event.valid?).to eq true expect(event.valid?).to be true
expect(event.errors.full_messages).to eq [] expect(event.errors.full_messages).to eq []
end end
it 'it is not valid, if max_attendees attribute is bigger than size of room' do it 'it is not valid, if max_attendees attribute is bigger than size of room' do
event.max_attendees = 4 event.max_attendees = 4
expect(event.valid?).to eq false expect(event.valid?).to be false
expect(event.errors[:max_attendees]).to eq ['cannot be more than the room\'s capacity (3)'] expect(event.errors[:max_attendees]).to eq ['cannot be more than the room\'s capacity (3)']
end end
end end
@ -56,13 +56,13 @@ describe Event do
context 'is invalid' do context 'is invalid' do
it 'when abstract is too long' do it 'when abstract is too long' do
event.abstract = 'Test abstract here' event.abstract = 'Test abstract here'
expect(event.valid?).to eq false expect(event.valid?).to be false
expect(event.errors[:abstract]).to eq ['cannot have more than 2 words'] expect(event.errors[:abstract]).to eq ['cannot have more than 2 words']
end end
it 'when abstract is too short' do it 'when abstract is too short' do
event.abstract = 'Test' event.abstract = 'Test'
expect(event.valid?).to eq false expect(event.valid?).to be false
expect(event.errors[:abstract]).to eq ['cannot have less than 2 words'] expect(event.errors[:abstract]).to eq ['cannot have less than 2 words']
end end
end end
@ -70,7 +70,7 @@ describe Event do
context 'is valid' do context 'is valid' do
it 'when abstract length is within limits' do it 'when abstract length is within limits' do
event.abstract = 'Test abstract' event.abstract = 'Test abstract'
expect(event.valid?).to eq true expect(event.valid?).to be true
expect(event.errors.size).to eq 0 expect(event.errors.size).to eq 0
end end
end end
@ -81,7 +81,7 @@ describe Event do
it 'when event is created after the conference end_date, and returns an error message' do it 'when event is created after the conference end_date, and returns an error message' do
conference = create(:conference, start_date: Date.today - 1, end_date: Date.today - 1) conference = create(:conference, start_date: Date.today - 1, end_date: Date.today - 1)
new_event = build(:event, program: conference.program) new_event = build(:event, program: conference.program)
expect(new_event.valid?).to eq false expect(new_event.valid?).to be false
expect(new_event.errors[:created_at]).to eq ["can't be after the conference end date!"] expect(new_event.errors[:created_at]).to eq ["can't be after the conference end date!"]
end end
end end
@ -90,7 +90,7 @@ describe Event do
it 'when event is created before the conference end_date' do it 'when event is created before the conference end_date' do
conference = create(:conference, start_date: Date.today - 1, end_date: Date.today + 1) conference = create(:conference, start_date: Date.today - 1, end_date: Date.today + 1)
new_event = build(:event, program: conference.program) new_event = build(:event, program: conference.program)
expect(new_event.valid?).to eq true expect(new_event.valid?).to be true
end end
end end
end end
@ -100,7 +100,7 @@ describe Event do
it 'when the track belongs to the same program and is confirmed' do it 'when the track belongs to the same program and is confirmed' do
track = create(:track, state: 'confirmed', program: conference.program) track = create(:track, state: 'confirmed', program: conference.program)
event = build(:event, program: conference.program, track: track) event = build(:event, program: conference.program, track: track)
expect(event.valid?).to eq true expect(event.valid?).to be true
end end
end end
@ -108,7 +108,7 @@ describe Event do
it 'when the track doesn\'t have the same program' do it 'when the track doesn\'t have the same program' do
track = create(:track, state: 'confirmed') track = create(:track, state: 'confirmed')
event = build(:event, program: conference.program, track: track) event = build(:event, program: conference.program, track: track)
expect(event.valid?).to eq false expect(event.valid?).to be false
expect(event.errors[:track]).to eq ['is invalid'] expect(event.errors[:track]).to eq ['is invalid']
end end
@ -116,7 +116,7 @@ describe Event do
track = create(:track, program: conference.program) track = create(:track, program: conference.program)
allow(track).to receive(:confirmed?).and_return(false) allow(track).to receive(:confirmed?).and_return(false)
event = build(:event, program: conference.program, track: track) event = build(:event, program: conference.program, track: track)
expect(event.valid?).to eq false expect(event.valid?).to be false
expect(event.errors[:track]).to eq ['is invalid'] expect(event.errors[:track]).to eq ['is invalid']
end end
end end
@ -146,7 +146,7 @@ describe Event do
end end
end end
describe 'scope ' do describe 'scope' do
context 'confirmed' do context 'confirmed' do
it 'returns only confirmed events' do it 'returns only confirmed events' do
my_event = create(:event, state: 'confirmed', program: conference.program) my_event = create(:event, state: 'confirmed', program: conference.program)
@ -165,10 +165,10 @@ describe Event do
end end
describe '#scheduled?' do describe '#scheduled?' do
it { expect(event.scheduled?).to eq false } it { expect(event.scheduled?).to be false }
it 'returns true if the event is scheduled' do it 'returns true if the event is scheduled' do
create(:event_schedule, event: event) create(:event_schedule, event: event)
expect(event.scheduled?).to eq true expect(event.scheduled?).to be true
end end
end end
@ -185,34 +185,34 @@ describe Event do
it 'returns true, if the event has no max_attendees' do it 'returns true, if the event has no max_attendees' do
event.max_attendees = nil event.max_attendees = nil
event.save! event.save!
expect(event.registration_possible?).to eq true expect(event.registration_possible?).to be true
end end
it 'returns true, if the limit has not been reached' do it 'returns true, if the limit has not been reached' do
expect(event.registration_possible?).to eq true expect(event.registration_possible?).to be true
end end
it 'returns true, if the event is confirmed' do it 'returns true, if the event is confirmed' do
event.save! event.save!
expect(event.registration_possible?).to eq true expect(event.registration_possible?).to be true
end end
it 'returns false, if the limit has been reached' do it 'returns false, if the limit has been reached' do
event.registrations << create(:registration) event.registrations << create(:registration)
event.registrations << create(:registration) event.registrations << create(:registration)
expect(event.registration_possible?).to eq false expect(event.registration_possible?).to be false
end end
it 'returns false, if the event is not confirmed' do it 'returns false, if the event is not confirmed' do
event.state = 'new' event.state = 'new'
event.save! event.save!
expect(event.registration_possible?).to eq false expect(event.registration_possible?).to be false
end end
end end
describe 'when the event does not require registration' do describe 'when the event does not require registration' do
it 'returns false' do it 'returns false' do
expect(event.registration_possible?).to eq false expect(event.registration_possible?).to be false
end end
end end
end end
@ -236,22 +236,22 @@ describe Event do
describe '#voted?' do describe '#voted?' do
it 'returns false if the event has no votes' do it 'returns false if the event has no votes' do
expect(event.voted?).to eq false expect(event.voted?).to be false
end end
it 'returns false if the event has no votes by that user' do it 'returns false if the event has no votes by that user' do
create(:vote, user: another_user, event: event) create(:vote, user: another_user, event: event)
expect(event.voted?(user)).to eq false expect(event.voted?(user)).to be false
end end
it 'returns true when the event has votes' do it 'returns true when the event has votes' do
create(:vote, user: another_user, event: event) create(:vote, user: another_user, event: event)
expect(event.voted?).to eq true expect(event.voted?).to be true
end end
it 'returns true when the event has votes by that user' do it 'returns true when the event has votes by that user' do
create(:vote, user: user, event: event) create(:vote, user: user, event: event)
expect(event.voted?(user)).to eq true expect(event.voted?(user)).to be true
end end
end end

View file

@ -24,7 +24,7 @@ describe Payment do
let(:ticket_1) { create(:ticket, price: 10, price_currency: 'USD', conference: conference) } let(:ticket_1) { create(:ticket, price: 10, price_currency: 'USD', conference: conference) }
let(:payment) { create(:payment, user: user, conference: conference) } let(:payment) { create(:payment, user: user, conference: conference) }
it ' returns correct unpaid amount' do it 'returns correct unpaid amount' do
create(:ticket_purchase, ticket: ticket_1, user: user, quantity: 8) create(:ticket_purchase, ticket: ticket_1, user: user, quantity: 8)
expect(payment.amount_to_pay).to eq(8000) expect(payment.amount_to_pay).to eq(8000)
end end
@ -71,7 +71,7 @@ describe Payment do
context 'when the card is invalid' do context 'when the card is invalid' do
it 'returns false' do it 'returns false' do
payment_result = payment.purchase payment_result = payment.purchase
expect(payment_result).to eq false expect(payment_result).to be false
end end
it 'assigns "failure" to payment.status' do it 'assigns "failure" to payment.status' do

View file

@ -75,7 +75,7 @@ describe Program do
end end
it 'returns true if blind_voting is disabled' do it 'returns true if blind_voting is disabled' do
program.blind_voting = false program.blind_voting = false
expect(program.show_voting?).to eq true expect(program.show_voting?).to be true
end end
end end
@ -86,19 +86,19 @@ describe Program do
it 'returns true if voting period is over' do it 'returns true if voting period is over' do
program.voting_end_date = Date.today - 1 program.voting_end_date = Date.today - 1
expect(program.show_voting?).to eq true expect(program.show_voting?).to be true
end end
it 'returns false if we are still in votig period' do it 'returns false if we are still in votig period' do
program.voting_end_date = Date.today + 1 program.voting_end_date = Date.today + 1
expect(program.show_voting?).to eq false expect(program.show_voting?).to be false
end end
end end
end end
describe 'voting_period?' do describe 'voting_period?' do
it 'retuns true when voting dates are not set' do it 'retuns true when voting dates are not set' do
expect(program.voting_period?).to eq true expect(program.voting_period?).to be true
end end
shared_examples 'voting period' do |voting_start_date, voting_end_date, returns| shared_examples 'voting period' do |voting_start_date, voting_end_date, returns|
@ -125,7 +125,7 @@ describe Program do
expect(program.rating_enabled?).to be true expect(program.rating_enabled?).to be true
end end
it 'returns false if proposals cannot be rated (program.rating == 0) ' do it 'returns false if proposals cannot be rated (program.rating == 0)' do
program = conference.program program = conference.program
program.rating = 0 program.rating = 0
expect(program.rating_enabled?).to be false expect(program.rating_enabled?).to be false
@ -156,7 +156,7 @@ describe Program do
it 'and creates events_types' do it 'and creates events_types' do
program.destroy! program.destroy!
conference.reload conference.reload
expect(conference.program).to eq nil expect(conference.program).to be_nil
create(:program, conference_id: conference.id) create(:program, conference_id: conference.id)
conference.reload conference.reload
@ -166,7 +166,7 @@ describe Program do
it 'and creates difficulty_levels' do it 'and creates difficulty_levels' do
program.destroy! program.destroy!
conference.reload conference.reload
expect(conference.program).to eq nil expect(conference.program).to be_nil
create(:program, conference_id: conference.id) create(:program, conference_id: conference.id)
conference.reload conference.reload
@ -206,25 +206,25 @@ describe Program do
describe 'languages' do describe 'languages' do
it "is not valid if languages aren't two letters separated by commas" do it "is not valid if languages aren't two letters separated by commas" do
program.languages = 'eng, De es' program.languages = 'eng, De es'
expect(program.valid?).to eq false expect(program.valid?).to be false
expect(program.errors[:languages]).to eq ['must be two letters separated by commas'] expect(program.errors[:languages]).to eq ['must be two letters separated by commas']
end end
it 'is not valid if languages are repeated' do it 'is not valid if languages are repeated' do
program.languages = 'en,de,es,en' program.languages = 'en,de,es,en'
expect(program.valid?).to eq false expect(program.valid?).to be false
expect(program.errors[:languages]).to eq ["can't be repeated"] expect(program.errors[:languages]).to eq ["can't be repeated"]
end end
it "is not valid if languages aren't ISO 639-1 valid codes" do it "is not valid if languages aren't ISO 639-1 valid codes" do
program.languages = 'en,hh,yu,zi,oo' program.languages = 'en,hh,yu,zi,oo'
expect(program.valid?).to eq false expect(program.valid?).to be false
expect(program.errors[:languages]).to eq ['must be ISO 639-1 valid codes'] expect(program.errors[:languages]).to eq ['must be ISO 639-1 valid codes']
end end
it 'is valid otherwise' do it 'is valid otherwise' do
program.languages = 'en,De, ES, ru,el' program.languages = 'en,De, ES, ru,el'
expect(program.valid?).to eq true expect(program.valid?).to be true
end end
end end
@ -244,15 +244,15 @@ describe Program do
let!(:event_schedule) { create(:event_schedule, event: event, schedule: schedule, start_time: DateTime.parse("#{Date.current + 1} 10:00").utc) } let!(:event_schedule) { create(:event_schedule, event: event, schedule: schedule, start_time: DateTime.parse("#{Date.current + 1} 10:00").utc) }
it 'returns false irrespective of any date' do it 'returns false irrespective of any date' do
expect(program.any_event_for_this_date?(Date.current + 1)).to eq false expect(program.any_event_for_this_date?(Date.current + 1)).to be false
end end
it 'returns false if date passed is empty' do it 'returns false if date passed is empty' do
expect(program.any_event_for_this_date?('')).to eq false expect(program.any_event_for_this_date?('')).to be false
end end
it 'returns false if date passed is nil' do it 'returns false if date passed is nil' do
expect(program.any_event_for_this_date?(nil)).to eq false expect(program.any_event_for_this_date?(nil)).to be false
end end
end end
@ -266,19 +266,19 @@ describe Program do
end end
it 'returns true if there is any event for this date' do it 'returns true if there is any event for this date' do
expect(program.any_event_for_this_date?(Date.current + 1)).to eq true expect(program.any_event_for_this_date?(Date.current + 1)).to be true
end end
it 'returns false if there is no event for this date' do it 'returns false if there is no event for this date' do
expect(program.any_event_for_this_date?(Date.current + 2)).to eq false expect(program.any_event_for_this_date?(Date.current + 2)).to be false
end end
it 'returns false if date passed is empty' do it 'returns false if date passed is empty' do
expect(program.any_event_for_this_date?('')).to eq false expect(program.any_event_for_this_date?('')).to be false
end end
it 'returns false if date passed is nil' do it 'returns false if date passed is nil' do
expect(program.any_event_for_this_date?(nil)).to eq false expect(program.any_event_for_this_date?(nil)).to be false
end end
end end
end end
@ -291,7 +291,7 @@ describe Program do
end end
it 'returns nil if the program doesn\'t have a cfp' do it 'returns nil if the program doesn\'t have a cfp' do
expect(program.cfp).to eq(nil) expect(program.cfp).to be_nil
end end
end end
@ -299,19 +299,19 @@ describe Program do
it 'returns an array without the \'events\' type, when the cfp for events exists' do it 'returns an array without the \'events\' type, when the cfp for events exists' do
create(:cfp, cfp_type: 'events', program: program) create(:cfp, cfp_type: 'events', program: program)
expect(program.remaining_cfp_types).to be_a Array expect(program.remaining_cfp_types).to be_a Array
expect(program.remaining_cfp_types.include?('events')).to eq false expect(program.remaining_cfp_types.include?('events')).to be false
end end
it 'returns an array without the \'booths\' type, when the cfp for booths exists' do it 'returns an array without the \'booths\' type, when the cfp for booths exists' do
create(:cfp, cfp_type: 'booths', program: program) create(:cfp, cfp_type: 'booths', program: program)
expect(program.remaining_cfp_types).to be_a Array expect(program.remaining_cfp_types).to be_a Array
expect(program.remaining_cfp_types.include?('booths')).to eq false expect(program.remaining_cfp_types.include?('booths')).to be false
end end
it 'returns an array without the \'tracks\' type, when the cfp for tracks exists' do it 'returns an array without the \'tracks\' type, when the cfp for tracks exists' do
create(:cfp, cfp_type: 'tracks', program: program) create(:cfp, cfp_type: 'tracks', program: program)
expect(program.remaining_cfp_types).to be_a Array expect(program.remaining_cfp_types).to be_a Array
expect(program.remaining_cfp_types.include?('tracks')).to eq false expect(program.remaining_cfp_types.include?('tracks')).to be false
end end
it 'returns an empty array when cfps for all the types exist' do it 'returns an empty array when cfps for all the types exist' do

View file

@ -22,13 +22,13 @@ describe RegistrationPeriod do
it 'when start_date and end_date are before conference end_date' do it 'when start_date and end_date are before conference end_date' do
registration_period.start_date = conference.end_date - 2 registration_period.start_date = conference.end_date - 2
registration_period.end_date = conference.end_date - 1 registration_period.end_date = conference.end_date - 1
expect(registration_period.valid?).to eq true expect(registration_period.valid?).to be true
end end
it 'when start_date and end_date are the same day as conference end_date' do it 'when start_date and end_date are the same day as conference end_date' do
registration_period.start_date = conference.end_date registration_period.start_date = conference.end_date
registration_period.end_date = conference.end_date registration_period.end_date = conference.end_date
expect(registration_period.valid?).to eq true expect(registration_period.valid?).to be true
end end
end end
@ -36,13 +36,13 @@ describe RegistrationPeriod do
it 'when start_date and end_date are after conference end_date' do it 'when start_date and end_date are after conference end_date' do
registration_period.start_date = conference.end_date + 1 registration_period.start_date = conference.end_date + 1
registration_period.end_date = conference.end_date + 2 registration_period.end_date = conference.end_date + 2
expect(registration_period.valid?).to eq false expect(registration_period.valid?).to be false
end end
it 'when end_date is after conference end_date' do it 'when end_date is after conference end_date' do
registration_period.start_date = conference.end_date - 1 registration_period.start_date = conference.end_date - 1
registration_period.end_date = conference.end_date + 1 registration_period.end_date = conference.end_date + 1
expect(registration_period.valid?).to eq false expect(registration_period.valid?).to be false
end end
end end
end end
@ -52,13 +52,13 @@ describe RegistrationPeriod do
it 'when start_date is before end_date' do it 'when start_date is before end_date' do
registration_period.start_date = conference.end_date - 2 registration_period.start_date = conference.end_date - 2
registration_period.end_date = conference.end_date - 1 registration_period.end_date = conference.end_date - 1
expect(registration_period.valid?).to eq true expect(registration_period.valid?).to be true
end end
it 'when start_date and end_date are on the same day' do it 'when start_date and end_date are on the same day' do
registration_period.start_date = conference.end_date - 2 registration_period.start_date = conference.end_date - 2
registration_period.end_date = conference.end_date - 2 registration_period.end_date = conference.end_date - 2
expect(registration_period.valid?).to eq true expect(registration_period.valid?).to be true
end end
end end
@ -66,7 +66,7 @@ describe RegistrationPeriod do
it 'when start_date is after end_date' do it 'when start_date is after end_date' do
registration_period.start_date = conference.start_date + 2 registration_period.start_date = conference.start_date + 2
registration_period.end_date = conference.start_date + 1 registration_period.end_date = conference.start_date + 1
expect(registration_period.valid?).to eq false expect(registration_period.valid?).to be false
end end
end end
end end

View file

@ -26,6 +26,6 @@ describe Resource do
it 'is not valid with used greater than quantity' do it 'is not valid with used greater than quantity' do
resource.used = resource.quantity + 1 resource.used = resource.quantity + 1
expect(resource.valid?).to eq false expect(resource.valid?).to be false
end end
end end

View file

@ -30,35 +30,35 @@ describe SurveyQuestion do
it 'max_choices > min_choices' do it 'max_choices > min_choices' do
survey_question = build(:survey_question, kind: :choice, min_choices: 3, max_choices: 2) survey_question = build(:survey_question, kind: :choice, min_choices: 3, max_choices: 2)
expect(survey_question.valid?).to eq false expect(survey_question.valid?).to be false
expect(survey_question.errors[:max_choices]).to eq ['Max choices should not be less than min choices'] expect(survey_question.errors[:max_choices]).to eq ['Max choices should not be less than min choices']
end end
end end
describe '#multiple_choice?' do describe '#multiple_choice?' do
it 'returns false, when choice with 1 max_choice' do it 'returns false, when choice with 1 max_choice' do
expect(single_choice_question.multiple_choice?).to eq false expect(single_choice_question.multiple_choice?).to be false
end end
it 'returns true, when choice with 2 max_choices' do it 'returns true, when choice with 2 max_choices' do
expect(multiple_choice_question.multiple_choice?).to eq true expect(multiple_choice_question.multiple_choice?).to be true
end end
end end
describe '#single_choice?' do describe '#single_choice?' do
it 'returns true, when choice with 1 max_choice' do it 'returns true, when choice with 1 max_choice' do
expect(single_choice_question.single_choice?).to eq true expect(single_choice_question.single_choice?).to be true
end end
it 'returns false, when choice with 2 max_choices' do it 'returns false, when choice with 2 max_choices' do
expect(multiple_choice_question.single_choice?).to eq false expect(multiple_choice_question.single_choice?).to be false
end end
end end
describe 'min_choices value' do describe 'min_choices value' do
it 'nil, when boolean question' do it 'nil, when boolean question' do
boolean_question = create(:boolean_mandatory, min_choices: 3) boolean_question = create(:boolean_mandatory, min_choices: 3)
expect(boolean_question.min_choices).to eq nil expect(boolean_question.min_choices).to be_nil
end end
it 'not nil, when choice question' do it 'not nil, when choice question' do
@ -86,7 +86,7 @@ describe SurveyQuestion do
shared_examples 'is nil' do |question_kind, field| shared_examples 'is nil' do |question_kind, field|
scenario "when question is #{question_kind} and field is #{field}" do scenario "when question is #{question_kind} and field is #{field}" do
question = create(:survey_question, kind: question_kind.to_sym, field => 3) question = create(:survey_question, kind: question_kind.to_sym, field => 3)
expect(question.send(field)).to eq nil expect(question.send(field)).to be_nil
end end
end end

View file

@ -17,10 +17,10 @@ describe Survey do
end end
describe '#active?' do describe '#active?' do
it { expect(survey_active.active?).to eq true } it { expect(survey_active.active?).to be true }
it { expect(survey_inactive.active?).to eq false } it { expect(survey_inactive.active?).to be false }
it 'returns true, if both start_date and end_date are not set' do it 'returns true, if both start_date and end_date are not set' do
expect(create(:survey, start_date: nil, end_date: nil, surveyable: create(:conference)).active?).to eq true expect(create(:survey, start_date: nil, end_date: nil, surveyable: create(:conference)).active?).to be true
end end
end end
end end

View file

@ -42,7 +42,7 @@ describe TicketPurchase do
it 'it is not valid, if quantity for registration tickets is greater than to one' do it 'it is not valid, if quantity for registration tickets is greater than to one' do
ticket_purchase.quantity = 4 ticket_purchase.quantity = 4
expect(ticket_purchase.valid?).to eq false expect(ticket_purchase.valid?).to be false
expect(ticket_purchase.errors[:quantity]).to eq ['cannot be greater than one for registration tickets.'] expect(ticket_purchase.errors[:quantity]).to eq ['cannot be greater than one for registration tickets.']
end end
end end

View file

@ -13,10 +13,10 @@ describe TicketScanning do
describe 'before_create' do describe 'before_create' do
it 'marks user as present' do it 'marks user as present' do
expect(registration.attended).to eq(false) expect(registration.attended).to be(false)
ticket_scanning ticket_scanning
registration.reload registration.reload
expect(registration.attended).to eq(true) expect(registration.attended).to be(true)
end end
end end
end end

View file

@ -54,11 +54,11 @@ describe Ticket do
create(:ticket_purchase, create(:ticket_purchase,
user: user, user: user,
ticket: ticket) ticket: ticket)
expect(ticket.bought?(user)).to eq(true) expect(ticket.bought?(user)).to be(true)
end end
it 'returns false if the user has not bought this ticket' do it 'returns false if the user has not bought this ticket' do
expect(ticket.bought?(user)).to eq(false) expect(ticket.bought?(user)).to be(false)
end end
end end
@ -79,7 +79,7 @@ describe Ticket do
context 'user has not paid' do context 'user has not paid' do
it 'returns true' do it 'returns true' do
expect(ticket.unpaid?(user)).to eq(true) expect(ticket.unpaid?(user)).to be(true)
end end
end end
@ -87,7 +87,7 @@ describe Ticket do
before { ticket_purchase.update_attribute(:paid, true) } before { ticket_purchase.update_attribute(:paid, true) }
it 'returns false' do it 'returns false' do
expect(ticket.unpaid?(user)).to eq(false) expect(ticket.unpaid?(user)).to be(false)
end end
end end
end end

View file

@ -75,32 +75,32 @@ describe Track do
context 'is valid' do context 'is valid' do
it 'when the track\'s dates are between the conference\'s dates' do it 'when the track\'s dates are between the conference\'s dates' do
track = build(:track, start_date: @conference.start_date, end_date: @conference.end_date, program: @conference.program) track = build(:track, start_date: @conference.start_date, end_date: @conference.end_date, program: @conference.program)
expect(track.valid?).to eq true expect(track.valid?).to be true
end end
end end
context 'is invalid' do context 'is invalid' do
it 'when the track\'s start date is before the conference\'s start date' do it 'when the track\'s start date is before the conference\'s start date' do
track = build(:track, start_date: 2.days.ago, end_date: Date.tomorrow, program: @conference.program) track = build(:track, start_date: 2.days.ago, end_date: Date.tomorrow, program: @conference.program)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:start_date]).to eq ["can't be outside of the conference's dates (#{1.day.ago.to_date}-#{2.days.from_now.to_date})"] expect(track.errors[:start_date]).to eq ["can't be outside of the conference's dates (#{1.day.ago.to_date}-#{2.days.from_now.to_date})"]
end end
it 'when the track\'s start date is after the conference\'s end date' do it 'when the track\'s start date is after the conference\'s end date' do
track = build(:track, start_date: 3.days.from_now, end_date: 4.days.from_now, program: @conference.program) track = build(:track, start_date: 3.days.from_now, end_date: 4.days.from_now, program: @conference.program)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:start_date]).to eq ["can't be outside of the conference's dates (#{1.day.ago.to_date}-#{2.days.from_now.to_date})"] expect(track.errors[:start_date]).to eq ["can't be outside of the conference's dates (#{1.day.ago.to_date}-#{2.days.from_now.to_date})"]
end end
it 'when the track\'s end date is before the conference\'s start date' do it 'when the track\'s end date is before the conference\'s start date' do
track = build(:track, start_date: 3.days.ago, end_date: 2.days.ago, program: @conference.program) track = build(:track, start_date: 3.days.ago, end_date: 2.days.ago, program: @conference.program)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:end_date]).to eq ["can't be outside of the conference's dates (#{1.day.ago.to_date}-#{2.days.from_now.to_date})"] expect(track.errors[:end_date]).to eq ["can't be outside of the conference's dates (#{1.day.ago.to_date}-#{2.days.from_now.to_date})"]
end end
it 'when the track\'s end date is after the conference\'s end date' do it 'when the track\'s end date is after the conference\'s end date' do
track = build(:track, start_date: Date.today, end_date: 3.days.from_now, program: @conference.program) track = build(:track, start_date: Date.today, end_date: 3.days.from_now, program: @conference.program)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:end_date]).to eq ["can't be outside of the conference's dates (#{1.day.ago.to_date}-#{2.days.from_now.to_date})"] expect(track.errors[:end_date]).to eq ["can't be outside of the conference's dates (#{1.day.ago.to_date}-#{2.days.from_now.to_date})"]
end end
end end
@ -114,14 +114,14 @@ describe Track do
context 'is valid' do context 'is valid' do
it 'when the track\'s start date is before its end date' do it 'when the track\'s start date is before its end date' do
track = build(:track, start_date: Date.today, end_date: Date.tomorrow, program: @conference.program) track = build(:track, start_date: Date.today, end_date: Date.tomorrow, program: @conference.program)
expect(track.valid?).to eq true expect(track.valid?).to be true
end end
end end
context 'is invalid' do context 'is invalid' do
it 'when the track\'s start date is after it\'s end date' do it 'when the track\'s start date is after it\'s end date' do
track = build(:track, start_date: 1.day.from_now, end_date: 1.day.ago) track = build(:track, start_date: 1.day.from_now, end_date: 1.day.ago)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:start_date]).to eq ['can\'t be after the end date'] expect(track.errors[:start_date]).to eq ['can\'t be after the end date']
end end
end end
@ -137,7 +137,7 @@ describe Track do
it 'when the track\'s room belongs to the venue of the conference' do it 'when the track\'s room belongs to the venue of the conference' do
room = create(:room, venue: @conference.venue) room = create(:room, venue: @conference.venue)
track = build(:track, :self_organized, state: 'accepted', program: @conference.program, room: room) track = build(:track, :self_organized, state: 'accepted', program: @conference.program, room: room)
expect(track.valid?).to eq true expect(track.valid?).to be true
end end
end end
@ -147,7 +147,7 @@ describe Track do
other_conference.venue = create(:venue) other_conference.venue = create(:venue)
room = create(:room, venue: other_conference.venue) room = create(:room, venue: other_conference.venue)
track = build(:track, :self_organized, state: 'accepted', program: @conference.program, room: room) track = build(:track, :self_organized, state: 'accepted', program: @conference.program, room: room)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:room]).to eq ['must be a room of The venue'] expect(track.errors[:room]).to eq ['must be a room of The venue']
end end
end end
@ -165,19 +165,19 @@ describe Track do
other_room = create(:room, venue: @conference.venue) other_room = create(:room, venue: @conference.venue)
create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: other_room, start_date: Date.current, end_date: Date.current) create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: other_room, start_date: Date.current, end_date: Date.current)
track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current) track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current)
expect(track.valid?).to eq true expect(track.valid?).to be true
end end
it 'when it ends before the other tracks in the same room' do it 'when it ends before the other tracks in the same room' do
create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current) create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current)
track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current - 1.day, end_date: Date.current - 1.day) track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current - 1.day, end_date: Date.current - 1.day)
expect(track.valid?).to eq true expect(track.valid?).to be true
end end
it 'when it starts after the other tracks in the same room' do it 'when it starts after the other tracks in the same room' do
create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current) create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current)
track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current + 1.day, end_date: Date.current + 1.day) track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current + 1.day, end_date: Date.current + 1.day)
expect(track.valid?).to eq true expect(track.valid?).to be true
end end
end end
@ -185,35 +185,35 @@ describe Track do
it 'when it starts and/or ends with another track in the same room' do it 'when it starts and/or ends with another track in the same room' do
create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current) create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current)
track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current) track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room'] expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room']
end end
it 'when it starts before another track and ends after the other starts and before it ends' do it 'when it starts before another track and ends after the other starts and before it ends' do
create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current + 2.days) create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current + 2.days)
track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current - 1.day, end_date: Date.current + 1.day) track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current - 1.day, end_date: Date.current + 1.day)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room'] expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room']
end end
it 'when it starts after another track and before it ends and ends after the other' do it 'when it starts after another track and before it ends and ends after the other' do
create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current + 2.days) create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current + 2.days)
track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current + 1.day, end_date: Date.current + 3.days) track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current + 1.day, end_date: Date.current + 3.days)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room'] expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room']
end end
it 'when it starts after another track and ends before the other' do it 'when it starts after another track and ends before the other' do
create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current + 2.days) create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current + 2.days)
track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current + 1.day, end_date: Date.current + 1.day) track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current + 1.day, end_date: Date.current + 1.day)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room'] expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room']
end end
it 'when it starts before another track and ends after the other' do it 'when it starts before another track and ends after the other' do
create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current) create(:track, :self_organized, state: 'confirmed', program: @conference.program, room: @room, start_date: Date.current, end_date: Date.current)
track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current - 1.day, end_date: Date.current + 1.day) track = build(:track, :self_organized, program: @conference.program, room: @room, start_date: Date.current - 1.day, end_date: Date.current + 1.day)
expect(track.valid?).to eq false expect(track.valid?).to be false
expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room'] expect(track.errors[:track]).to eq ['has overlapping dates with a confirmed or accepted track in the same room']
end end
end end
@ -229,7 +229,7 @@ describe Track do
context 'includes' do context 'includes' do
it 'when track is accepted' do it 'when track is accepted' do
accepted_track = create(:track, state: 'accepted', program: @program) accepted_track = create(:track, state: 'accepted', program: @program)
expect(@program.tracks.accepted.include?(accepted_track)).to eq true expect(@program.tracks.accepted.include?(accepted_track)).to be true
end end
end end
@ -237,7 +237,7 @@ describe Track do
%w[new to_accept confirmed to_reject rejected canceled withdrawn].each do |state| %w[new to_accept confirmed to_reject rejected canceled withdrawn].each do |state|
it "when track is #{state.humanize}" do it "when track is #{state.humanize}" do
not_accepted_track = create(:track, state: state, program: @program) not_accepted_track = create(:track, state: state, program: @program)
expect(@program.tracks.accepted.include?(not_accepted_track)).to eq false expect(@program.tracks.accepted.include?(not_accepted_track)).to be false
end end
end end
end end
@ -251,7 +251,7 @@ describe Track do
context 'includes' do context 'includes' do
it 'tracks with state \'confirmed\'' do it 'tracks with state \'confirmed\'' do
confirmed_track = create(:track, state: 'confirmed', program: @program) confirmed_track = create(:track, state: 'confirmed', program: @program)
expect(@program.tracks.confirmed.include?(confirmed_track)).to eq true expect(@program.tracks.confirmed.include?(confirmed_track)).to be true
end end
end end
@ -259,7 +259,7 @@ describe Track do
%w[new to_accept accepted to_reject rejected canceled withdrawn].each do |state| %w[new to_accept accepted to_reject rejected canceled withdrawn].each do |state|
it "tracks with state '#{state}'" do it "tracks with state '#{state}'" do
unconfirmed_track = create(:track, state: state, program: @program) unconfirmed_track = create(:track, state: state, program: @program)
expect(@program.tracks.confirmed.include?(unconfirmed_track)).to eq false expect(@program.tracks.confirmed.include?(unconfirmed_track)).to be false
end end
end end
end end
@ -273,11 +273,11 @@ describe Track do
end end
it 'include tracks with the cfp_active flag enabled' do it 'include tracks with the cfp_active flag enabled' do
expect(@program.tracks.cfp_active.include?(@cfp_active_track)).to eq true expect(@program.tracks.cfp_active.include?(@cfp_active_track)).to be true
end end
it 'excludes tracks with the cfp_active flag disabled' do it 'excludes tracks with the cfp_active flag disabled' do
expect(@program.tracks.cfp_active.include?(@non_cfp_active_track)).to eq false expect(@program.tracks.cfp_active.include?(@non_cfp_active_track)).to be false
end end
end end
@ -291,11 +291,11 @@ describe Track do
end end
it 'includes self-organized tracks' do it 'includes self-organized tracks' do
expect(@program.tracks.self_organized.include?(self_organized_track)).to eq true expect(@program.tracks.self_organized.include?(self_organized_track)).to be true
end end
it 'excludes regular tracks' do it 'excludes regular tracks' do
expect(@program.tracks.self_organized.include?(track)).to eq false expect(@program.tracks.self_organized.include?(track)).to be false
end end
end end
end end
@ -303,12 +303,12 @@ describe Track do
describe '#self_organized?' do describe '#self_organized?' do
it 'returns true when it has a submitter' do it 'returns true when it has a submitter' do
expect(self_organized_track.submitter).to be_a User expect(self_organized_track.submitter).to be_a User
expect(self_organized_track.self_organized?).to eq true expect(self_organized_track.self_organized?).to be true
end end
it 'returns false when it doesn\'t have a submitter' do it 'returns false when it doesn\'t have a submitter' do
expect(track.submitter).to eq nil expect(track.submitter).to be_nil
expect(track.self_organized?).to eq false expect(track.self_organized?).to be false
end end
end end
@ -346,17 +346,17 @@ describe Track do
end end
it 'gives the role of the track organizer to the submitter of the track' do it 'gives the role of the track organizer to the submitter of the track' do
expect(@submitter.has_cached_role?(:track_organizer, self_organized_track)).to eq false expect(@submitter.has_cached_role?(:track_organizer, self_organized_track)).to be false
self_organized_track.assign_role_to_submitter self_organized_track.assign_role_to_submitter
expect(@submitter.has_cached_role?(:track_organizer, self_organized_track)).to eq true expect(@submitter.has_cached_role?(:track_organizer, self_organized_track)).to be true
end end
it 'is executed when the track is confirmed' do it 'is executed when the track is confirmed' do
self_organized_track.state = 'accepted' self_organized_track.state = 'accepted'
self_organized_track.save! self_organized_track.save!
expect(@submitter.has_cached_role?(:track_organizer, self_organized_track)).to eq false expect(@submitter.has_cached_role?(:track_organizer, self_organized_track)).to be false
self_organized_track.confirm self_organized_track.confirm
expect(@submitter.has_cached_role?(:track_organizer, self_organized_track)).to eq true expect(@submitter.has_cached_role?(:track_organizer, self_organized_track)).to be true
end end
end end
@ -373,23 +373,23 @@ describe Track do
end end
it 'revokes the role of the track organizer' do it 'revokes the role of the track organizer' do
expect(@a_track_organizer.has_cached_role?(:track_organizer, self_organized_track)).to eq true expect(@a_track_organizer.has_cached_role?(:track_organizer, self_organized_track)).to be true
self_organized_track.revoke_role_and_cleanup self_organized_track.revoke_role_and_cleanup
@a_track_organizer.reload @a_track_organizer.reload
expect(@a_track_organizer.has_cached_role?(:track_organizer, self_organized_track)).to eq false expect(@a_track_organizer.has_cached_role?(:track_organizer, self_organized_track)).to be false
end end
it 'destroys the track\'s schedules' do it 'destroys the track\'s schedules' do
expect(Schedule.find(@schedule_of_self_organized_track.id)).to eq @schedule_of_self_organized_track expect(Schedule.find(@schedule_of_self_organized_track.id)).to eq @schedule_of_self_organized_track
self_organized_track.revoke_role_and_cleanup self_organized_track.revoke_role_and_cleanup
expect(Schedule.find_by(id: @schedule_of_self_organized_track.id)).to eq nil expect(Schedule.find_by(id: @schedule_of_self_organized_track.id)).to be_nil
end end
it 'removes the track from the events that have it set' do it 'removes the track from the events that have it set' do
expect(@event_of_self_organized_track.track).to eq self_organized_track expect(@event_of_self_organized_track.track).to eq self_organized_track
self_organized_track.revoke_role_and_cleanup self_organized_track.revoke_role_and_cleanup
@event_of_self_organized_track.reload @event_of_self_organized_track.reload
expect(@event_of_self_organized_track.track).to eq nil expect(@event_of_self_organized_track.track).to be_nil
end end
it 'sets the state of the track\'s events to new' do it 'sets the state of the track\'s events to new' do
@ -404,17 +404,17 @@ describe Track do
self_organized_track.save! self_organized_track.save!
self_organized_track.cancel self_organized_track.cancel
@a_track_organizer.reload @a_track_organizer.reload
expect(@a_track_organizer.has_cached_role?(:track_organizer, self_organized_track)).to eq false expect(@a_track_organizer.has_cached_role?(:track_organizer, self_organized_track)).to be false
@event_of_self_organized_track.reload @event_of_self_organized_track.reload
expect(@event_of_self_organized_track.track).to eq nil expect(@event_of_self_organized_track.track).to be_nil
end end
it 'is executed when the track is withdrawn' do it 'is executed when the track is withdrawn' do
self_organized_track.withdraw self_organized_track.withdraw
@a_track_organizer.reload @a_track_organizer.reload
expect(@a_track_organizer.has_cached_role?(:track_organizer, self_organized_track)).to eq false expect(@a_track_organizer.has_cached_role?(:track_organizer, self_organized_track)).to be false
@event_of_self_organized_track.reload @event_of_self_organized_track.reload
expect(@event_of_self_organized_track.track).to eq nil expect(@event_of_self_organized_track.track).to be_nil
end end
end end
@ -423,7 +423,7 @@ describe Track do
it 'when the state is "accepted"' do it 'when the state is "accepted"' do
self_organized_track.state = 'accepted' self_organized_track.state = 'accepted'
self_organized_track.save! self_organized_track.save!
expect(self_organized_track.accepted?).to eq true expect(self_organized_track.accepted?).to be true
end end
end end
@ -432,7 +432,7 @@ describe Track do
it "when the state is \"#{state}\"" do it "when the state is \"#{state}\"" do
self_organized_track.state = state self_organized_track.state = state
self_organized_track.save! self_organized_track.save!
expect(self_organized_track.accepted?).to eq false expect(self_organized_track.accepted?).to be false
end end
end end
end end
@ -443,7 +443,7 @@ describe Track do
it 'when the state is "confirmed"' do it 'when the state is "confirmed"' do
self_organized_track.state = 'confirmed' self_organized_track.state = 'confirmed'
self_organized_track.save! self_organized_track.save!
expect(self_organized_track.confirmed?).to eq true expect(self_organized_track.confirmed?).to be true
end end
end end
@ -452,7 +452,7 @@ describe Track do
it "when the state is \"#{state}\"" do it "when the state is \"#{state}\"" do
self_organized_track.state = state self_organized_track.state = state
self_organized_track.save! self_organized_track.save!
expect(self_organized_track.confirmed?).to eq false expect(self_organized_track.confirmed?).to be false
end end
end end
end end
@ -472,7 +472,7 @@ describe Track do
allow(track).to receive(:confirmed?).and_return(false) allow(track).to receive(:confirmed?).and_return(false)
end end
it { expect(track.self_organized_and_accepted_or_confirmed?).to eq true } it { expect(track.self_organized_and_accepted_or_confirmed?).to be true }
end end
context 'accepted? returns false and confirmed? returns true' do context 'accepted? returns false and confirmed? returns true' do
@ -481,7 +481,7 @@ describe Track do
allow(track).to receive(:confirmed?).and_return(true) allow(track).to receive(:confirmed?).and_return(true)
end end
it { expect(track.self_organized_and_accepted_or_confirmed?).to eq true } it { expect(track.self_organized_and_accepted_or_confirmed?).to be true }
end end
end end
end end
@ -498,7 +498,7 @@ describe Track do
allow(track).to receive(:confirmed?).and_return(false) allow(track).to receive(:confirmed?).and_return(false)
end end
it { expect(track.self_organized_and_accepted_or_confirmed?).to eq false } it { expect(track.self_organized_and_accepted_or_confirmed?).to be false }
end end
end end
@ -513,7 +513,7 @@ describe Track do
allow(track).to receive(:confirmed?).and_return(false) allow(track).to receive(:confirmed?).and_return(false)
end end
it { expect(track.self_organized_and_accepted_or_confirmed?).to eq false } it { expect(track.self_organized_and_accepted_or_confirmed?).to be false }
end end
context 'accepted? returns true and confirmed? returns false' do context 'accepted? returns true and confirmed? returns false' do
@ -522,7 +522,7 @@ describe Track do
allow(track).to receive(:confirmed?).and_return(false) allow(track).to receive(:confirmed?).and_return(false)
end end
it { expect(track.self_organized_and_accepted_or_confirmed?).to eq false } it { expect(track.self_organized_and_accepted_or_confirmed?).to be false }
end end
context 'accepted? returns false and confirmed? returns true' do context 'accepted? returns false and confirmed? returns true' do
@ -531,7 +531,7 @@ describe Track do
allow(track).to receive(:confirmed?).and_return(true) allow(track).to receive(:confirmed?).and_return(true)
end end
it { expect(track.self_organized_and_accepted_or_confirmed?).to eq false } it { expect(track.self_organized_and_accepted_or_confirmed?).to be false }
end end
end end
end end
@ -539,13 +539,13 @@ describe Track do
describe '#create_organizer_role' do describe '#create_organizer_role' do
it 'creates the role of the track organizer' do it 'creates the role of the track organizer' do
expect(Role.find_by(name: 'track_organizer', resource: self_organized_track)).to eq nil expect(Role.find_by(name: 'track_organizer', resource: self_organized_track)).to be_nil
self_organized_track.send(:create_organizer_role) self_organized_track.send(:create_organizer_role)
expect(Role.find_by(name: 'track_organizer', resource: self_organized_track).description).to eq 'For the organizers of the Track' expect(Role.find_by(name: 'track_organizer', resource: self_organized_track).description).to eq 'For the organizers of the Track'
end end
it 'is executed when the track is accepted' do it 'is executed when the track is accepted' do
expect(Role.find_by(name: 'track_organizer', resource: self_organized_track)).to eq nil expect(Role.find_by(name: 'track_organizer', resource: self_organized_track)).to be_nil
self_organized_track.accept self_organized_track.accept
expect(Role.find_by(name: 'track_organizer', resource: self_organized_track).description).to eq 'For the organizers of the Track' expect(Role.find_by(name: 'track_organizer', resource: self_organized_track).description).to eq 'For the organizers of the Track'
end end

View file

@ -346,7 +346,7 @@ describe User do
describe '#confirmed?' do describe '#confirmed?' do
context 'confirmed user' do context 'confirmed user' do
it 'returns true' do it 'returns true' do
expect(user.confirmed?).to eq true expect(user.confirmed?).to be true
end end
end end
@ -354,7 +354,7 @@ describe User do
before { user.update_attribute(:confirmed_at, nil) } before { user.update_attribute(:confirmed_at, nil) }
it 'returns false' do it 'returns false' do
expect(user.confirmed?).to eq false expect(user.confirmed?).to be false
end end
end end
end end
@ -395,7 +395,7 @@ describe User do
describe 'rolify' do describe 'rolify' do
it 'returns the correct role' do it 'returns the correct role' do
expect(user_admin.is_admin).to eq(true) expect(user_admin.is_admin).to be(true)
expect(organizer.roles.first).to eq(organizer_role) expect(organizer.roles.first).to eq(organizer_role)
end end
@ -430,7 +430,7 @@ describe User do
end end
describe 'assigns admin attribute' do describe 'assigns admin attribute' do
xit 'to second user when first user is deleted_user' do it 'to second user when first user is deleted_user' do
deleted_user = User.find_by(email: 'deleted@localhost.osem') deleted_user = User.find_by(email: 'deleted@localhost.osem')
expect(deleted_user.is_admin).to be false expect(deleted_user.is_admin).to be false

View file

@ -85,7 +85,7 @@ RSpec.configure do |config|
# use a real browser for JS tests # use a real browser for JS tests
Capybara.javascript_driver = ( Capybara.javascript_driver = (
ENV['OSEM_TEST_DRIVER'].try(:to_sym) || :chrome_headless ENV.fetch('OSEM_TEST_DRIVER', 'chrome_headless').to_sym
) )
# Includes helpers and connect them to specific types of tests # Includes helpers and connect them to specific types of tests

View file

@ -1,10 +1,10 @@
RSpec.configure do |config| RSpec.configure do |config|
# Tracker deprecation messages in each file # Tracker deprecation messages in each file
if ENV['DEPRECATION_TRACKER'] if ENV.fetch('DEPRECATION_TRACKER', nil)
DeprecationTracker.track_rspec( DeprecationTracker.track_rspec(
config, config,
shitlist_path: 'spec/support/deprecation_shitlist.json', shitlist_path: 'spec/support/deprecation_shitlist.json',
mode: ENV['DEPRECATION_TRACKER'], mode: ENV.fetch('DEPRECATION_TRACKER'),
transform_message: ->(message) { message.gsub("#{Rails.root}/", '') } transform_message: ->(message) { message.gsub("#{Rails.root}/", '') }
) )
end end