Merge some contributor fixes
This commit is contained in:
commit
0877aadb2e
72 changed files with 225 additions and 206 deletions
|
|
@ -2,10 +2,16 @@ require: rubocop-rspec
|
|||
|
||||
inherit_from: .rubocop_todo.yml
|
||||
|
||||
inherit_mode:
|
||||
merge:
|
||||
- Exclude
|
||||
|
||||
AllCops:
|
||||
UseCache: true
|
||||
CacheRootDirectory: tmp/rubocop_cache_rails_dir
|
||||
MaxFilesInCache: 4000
|
||||
Exclude:
|
||||
- db/schema.rb
|
||||
|
||||
#################### Style ###########################
|
||||
|
||||
|
|
|
|||
|
|
@ -1156,7 +1156,6 @@ Style/StringLiterals:
|
|||
- 'config/deploy.rb'
|
||||
- 'config/environments/production.rb'
|
||||
- 'config/puma.rb'
|
||||
- 'db/schema.rb'
|
||||
- 'lib/tasks/dump_db.rake'
|
||||
- 'lib/tasks/events_registrations.rake'
|
||||
- 'lib/tasks/factory_bot.rake'
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ RUN zypper -n install --no-recommends \
|
|||
# as ruby
|
||||
ruby2.5-devel \
|
||||
# as browser for feature tests
|
||||
chromium
|
||||
chromium xorg-x11-fonts
|
||||
|
||||
# Setup sudo
|
||||
RUN echo 'osem ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
||||
|
|
|
|||
3
Gemfile
3
Gemfile
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
source 'https://rubygems.org'
|
||||
|
||||
ruby ENV['OSEM_RUBY_VERSION'] || '2.5.5'
|
||||
ruby '~> 2.5.0'
|
||||
|
||||
# rails-assets requires >= 1.8.4
|
||||
if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4')
|
||||
|
|
@ -247,7 +247,6 @@ group :test do
|
|||
gem 'database_cleaner'
|
||||
gem 'geckodriver-helper'
|
||||
gem 'rspec-rails'
|
||||
gem 'transactional_capybara'
|
||||
gem 'webdrivers'
|
||||
# for measuring test coverage
|
||||
gem 'codecov', require: false
|
||||
|
|
|
|||
106
Gemfile.lock
106
Gemfile.lock
|
|
@ -13,25 +13,25 @@ GEM
|
|||
remote: https://rails-assets.org/
|
||||
specs:
|
||||
Ascii85 (1.0.3)
|
||||
actioncable (5.2.3)
|
||||
actionpack (= 5.2.3)
|
||||
actioncable (5.2.4.3)
|
||||
actionpack (= 5.2.4.3)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
actionmailer (5.2.3)
|
||||
actionpack (= 5.2.3)
|
||||
actionview (= 5.2.3)
|
||||
activejob (= 5.2.3)
|
||||
actionmailer (5.2.4.3)
|
||||
actionpack (= 5.2.4.3)
|
||||
actionview (= 5.2.4.3)
|
||||
activejob (= 5.2.4.3)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (5.2.3)
|
||||
actionview (= 5.2.3)
|
||||
activesupport (= 5.2.3)
|
||||
rack (~> 2.0)
|
||||
actionpack (5.2.4.3)
|
||||
actionview (= 5.2.4.3)
|
||||
activesupport (= 5.2.4.3)
|
||||
rack (~> 2.0, >= 2.0.8)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
actionview (5.2.3)
|
||||
activesupport (= 5.2.3)
|
||||
actionview (5.2.4.3)
|
||||
activesupport (= 5.2.4.3)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
|
|
@ -41,20 +41,20 @@ GEM
|
|||
activemodel (>= 4.1, < 6.1)
|
||||
case_transform (>= 0.2)
|
||||
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
||||
activejob (5.2.3)
|
||||
activesupport (= 5.2.3)
|
||||
activejob (5.2.4.3)
|
||||
activesupport (= 5.2.4.3)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (5.2.3)
|
||||
activesupport (= 5.2.3)
|
||||
activerecord (5.2.3)
|
||||
activemodel (= 5.2.3)
|
||||
activesupport (= 5.2.3)
|
||||
activemodel (5.2.4.3)
|
||||
activesupport (= 5.2.4.3)
|
||||
activerecord (5.2.4.3)
|
||||
activemodel (= 5.2.4.3)
|
||||
activesupport (= 5.2.4.3)
|
||||
arel (>= 9.0)
|
||||
activestorage (5.2.3)
|
||||
actionpack (= 5.2.3)
|
||||
activerecord (= 5.2.3)
|
||||
activestorage (5.2.4.3)
|
||||
actionpack (= 5.2.4.3)
|
||||
activerecord (= 5.2.4.3)
|
||||
marcel (~> 0.3.1)
|
||||
activesupport (5.2.3)
|
||||
activesupport (5.2.4.3)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
|
|
@ -76,8 +76,8 @@ GEM
|
|||
ast (2.4.0)
|
||||
autoprefixer-rails (9.6.4)
|
||||
execjs
|
||||
awesome_nested_set (3.1.4)
|
||||
activerecord (>= 4.0.0, < 5.3)
|
||||
awesome_nested_set (3.2.1)
|
||||
activerecord (>= 4.0.0, < 7.0)
|
||||
aws_cf_signer (0.1.3)
|
||||
axlsx_rails (0.5.2)
|
||||
actionpack (>= 3.1)
|
||||
|
|
@ -90,7 +90,7 @@ GEM
|
|||
bootstrap-switch-rails (3.0.2)
|
||||
bootstrap3-datetimepicker-rails (4.17.47)
|
||||
momentjs-rails (>= 2.8.1)
|
||||
builder (3.2.3)
|
||||
builder (3.2.4)
|
||||
byebug (11.0.1)
|
||||
cancancan (2.3.0)
|
||||
capybara (3.26.0)
|
||||
|
|
@ -125,7 +125,8 @@ GEM
|
|||
simplecov
|
||||
url
|
||||
coderay (1.1.1)
|
||||
concurrent-ruby (1.1.5)
|
||||
concurrent-ruby (1.1.6)
|
||||
connection_pool (2.2.2)
|
||||
countable-rails (0.0.1)
|
||||
railties (>= 3.1)
|
||||
countries (3.0.0)
|
||||
|
|
@ -137,7 +138,7 @@ GEM
|
|||
sort_alphabetical (~> 1.0)
|
||||
crack (0.4.3)
|
||||
safe_yaml (~> 1.0.0)
|
||||
crass (1.0.5)
|
||||
crass (1.0.6)
|
||||
daemons (1.3.1)
|
||||
dalli (2.7.10)
|
||||
dante (0.2.0)
|
||||
|
|
@ -230,7 +231,7 @@ GEM
|
|||
htmlentities (4.3.4)
|
||||
http-cookie (1.0.3)
|
||||
domain_name (~> 0.5)
|
||||
i18n (1.7.0)
|
||||
i18n (1.8.3)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n_data (0.8.0)
|
||||
inversion (1.1.1)
|
||||
|
|
@ -269,7 +270,7 @@ GEM
|
|||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
loggability (0.14.0)
|
||||
loofah (2.4.0)
|
||||
loofah (2.6.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
lumberjack (1.0.12)
|
||||
|
|
@ -281,14 +282,14 @@ GEM
|
|||
mime-types (3.2.2)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2018.0812)
|
||||
mimemagic (0.3.3)
|
||||
mimemagic (0.3.5)
|
||||
mina (1.2.3)
|
||||
open4 (~> 1.3.4)
|
||||
rake
|
||||
mini_magick (4.9.5)
|
||||
mini_mime (1.0.2)
|
||||
mini_portile2 (2.4.0)
|
||||
minitest (5.13.0)
|
||||
minitest (5.14.1)
|
||||
momentjs-rails (2.20.1)
|
||||
railties (>= 3.1)
|
||||
monetize (1.9.2)
|
||||
|
|
@ -306,7 +307,7 @@ GEM
|
|||
nenv (0.3.0)
|
||||
netrc (0.11.0)
|
||||
nio4r (2.5.2)
|
||||
nokogiri (1.10.8)
|
||||
nokogiri (1.10.9)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
notiffany (0.1.1)
|
||||
nenv (~> 0.1)
|
||||
|
|
@ -377,24 +378,24 @@ GEM
|
|||
slop (~> 3.4)
|
||||
public_suffix (3.1.1)
|
||||
puma (3.12.6)
|
||||
rack (2.1.4)
|
||||
rack (2.2.3)
|
||||
rack-openid (1.3.1)
|
||||
rack (>= 1.1.0)
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-test (1.1.0)
|
||||
rack (>= 1.0, < 3)
|
||||
rails (5.2.3)
|
||||
actioncable (= 5.2.3)
|
||||
actionmailer (= 5.2.3)
|
||||
actionpack (= 5.2.3)
|
||||
actionview (= 5.2.3)
|
||||
activejob (= 5.2.3)
|
||||
activemodel (= 5.2.3)
|
||||
activerecord (= 5.2.3)
|
||||
activestorage (= 5.2.3)
|
||||
activesupport (= 5.2.3)
|
||||
rails (5.2.4.3)
|
||||
actioncable (= 5.2.4.3)
|
||||
actionmailer (= 5.2.4.3)
|
||||
actionpack (= 5.2.4.3)
|
||||
actionview (= 5.2.4.3)
|
||||
activejob (= 5.2.4.3)
|
||||
activemodel (= 5.2.4.3)
|
||||
activerecord (= 5.2.4.3)
|
||||
activestorage (= 5.2.4.3)
|
||||
activesupport (= 5.2.4.3)
|
||||
bundler (>= 1.3.0)
|
||||
railties (= 5.2.3)
|
||||
railties (= 5.2.4.3)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-assets-bootstrap (3.3.6)
|
||||
rails-assets-jquery (>= 1.9.1, < 3)
|
||||
|
|
@ -428,9 +429,9 @@ GEM
|
|||
rails-i18n (5.1.3)
|
||||
i18n (>= 0.7, < 2)
|
||||
railties (>= 5.0, < 6)
|
||||
railties (5.2.3)
|
||||
actionpack (= 5.2.3)
|
||||
activesupport (= 5.2.3)
|
||||
railties (5.2.4.3)
|
||||
actionpack (= 5.2.4.3)
|
||||
activesupport (= 5.2.4.3)
|
||||
method_source
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.19.0, < 2.0)
|
||||
|
|
@ -559,18 +560,16 @@ GEM
|
|||
stripe (> 5, < 6)
|
||||
sysexits (1.2.0)
|
||||
temple (0.8.0)
|
||||
thor (0.20.3)
|
||||
thor (1.0.1)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.0.9)
|
||||
timecop (0.9.1)
|
||||
transactional_capybara (0.2.0)
|
||||
capybara
|
||||
transitions (1.2.1)
|
||||
ttfunk (1.5.1)
|
||||
turbolinks (5.2.1)
|
||||
turbolinks-source (~> 5.2)
|
||||
turbolinks-source (5.2.0)
|
||||
tzinfo (1.2.5)
|
||||
tzinfo (1.2.7)
|
||||
thread_safe (~> 0.1)
|
||||
uglifier (4.1.20)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
|
|
@ -597,7 +596,7 @@ GEM
|
|||
addressable (>= 2.3.6)
|
||||
crack (>= 0.3.2)
|
||||
hashdiff
|
||||
websocket-driver (0.7.1)
|
||||
websocket-driver (0.7.2)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.5)
|
||||
whenever (0.10.0)
|
||||
|
|
@ -713,7 +712,6 @@ DEPENDENCIES
|
|||
stripe
|
||||
stripe-ruby-mock
|
||||
timecop
|
||||
transactional_capybara
|
||||
transitions
|
||||
turbolinks
|
||||
uglifier (>= 1.3.0)
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ There is a rudimentary docker-compose configuration for production usage (`docke
|
|||
|
||||
|
||||
1. Configure OSEM
|
||||
You have at least to set `SECRET_KEY_BASE`
|
||||
You have at least to set `OSEM_DB_PASSWORD` and `SECRET_KEY_BASE`
|
||||
```
|
||||
cp dotenv.example .env.production
|
||||
vim .env.production
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ class AdminAbility
|
|||
can :manage, Conference, organization_id: org_ids_for_organization_admin
|
||||
can [:index, :show], Role
|
||||
|
||||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version, organization_id: org_ids_for_organization_admin
|
||||
|
||||
signed_in_with_organizer_role(user, conf_ids_for_organization_admin)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,9 @@ class Role < ApplicationRecord
|
|||
has_many :users_roles
|
||||
has_many :users, through: :users_roles
|
||||
|
||||
has_paper_trail on: [:create, :update], only: [:name, :description], meta: { conference_id: :resource_id }
|
||||
has_paper_trail on: [:create, :update],
|
||||
only: [:name, :description],
|
||||
meta: { conference_id: :conference_id, organization_id: :organization_id }
|
||||
|
||||
before_destroy :cancel
|
||||
scopify
|
||||
|
|
@ -14,6 +16,14 @@ class Role < ApplicationRecord
|
|||
|
||||
validates :name, uniqueness: { scope: :resource }
|
||||
|
||||
def conference_id
|
||||
resource_type == 'Conference' ? resource_id : nil
|
||||
end
|
||||
|
||||
def organization_id
|
||||
resource_type == 'Organization' ? resource_id : nil
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Needed to ensure that removing all user from role doesn't remove role.
|
||||
|
|
|
|||
|
|
@ -4,11 +4,8 @@ class UsersRole < ApplicationRecord
|
|||
belongs_to :role
|
||||
belongs_to :user
|
||||
|
||||
has_paper_trail on: [:create, :destroy], meta: { conference_id: :conference_id }
|
||||
delegate :conference_id, :organization_id, to: :role
|
||||
|
||||
private
|
||||
|
||||
def conference_id
|
||||
role.resource_id
|
||||
end
|
||||
has_paper_trail on: [:create, :destroy],
|
||||
meta: { conference_id: :conference_id, organization_id: :organization_id }
|
||||
end
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
input_html: { class: 'form-control',
|
||||
id: 'registration-period-end-datepicker' }
|
||||
= f.input :description, hint: markdown_hint,
|
||||
input_html: { rows: 2, data: { provide: 'markdown-editable' } }
|
||||
input_html: { rows: 2, data: { provide: 'markdown' } }
|
||||
- if cfp.cfp_type == 'events'
|
||||
= f.input :enable_registrations, as: :boolean,
|
||||
hint: 'Allow submitters to request registration?'
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
= semantic_form_for(@conference, url: admin_conference_path(@conference.short_title), html: {multipart: true}) do |f|
|
||||
= f.input :title, hint: "The full title of the conference, e.g. 'openSUSE Conference 2014'"
|
||||
= f.input :short_title, hint: "A short title, e.g. 'oSC14', to be used in URLs"
|
||||
= f.input :description, hint: markdown_hint('A description of the conference.'), input_html: { rows: 5, data: { provide: 'markdown-editable' } }
|
||||
= f.input :description, hint: markdown_hint('A description of the conference.'), input_html: { rows: 5, data: { provide: 'markdown' } }
|
||||
= f.input :color, hint: 'The color will be used eg for the dashboard.', input_html: {size: 6, type: 'color'}
|
||||
= f.label 'Conference Logo'
|
||||
%br
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
= semantic_form_for(@lodging, url: (@lodging.new_record? ? admin_conference_lodgings_path : admin_conference_lodging_path(@conference.short_title, @lodging))) do |f|
|
||||
= f.input :name, input_html: { autofocus: true}
|
||||
= f.input :website_link, input_html: { type: :url }
|
||||
= f.input :description, input_html: { rows: 5, cols: 20, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
||||
= f.input :description, input_html: { rows: 5, cols: 20, data: { provide: 'markdown' } }, hint: markdown_hint
|
||||
- if @lodging.picture?
|
||||
= image_tag @lodging.picture.thumb.url
|
||||
= f.input :picture
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
= f.inputs name: 'Organization details' do
|
||||
= f.input :name, as: :string, required: true
|
||||
= f.input :description, as: :text,
|
||||
input_html: { rows: 10, data: { provide: 'markdown-editable' } },
|
||||
input_html: { rows: 10, data: { provide: 'markdown' } },
|
||||
hint: markdown_hint,
|
||||
placeholder: 'Decribe about your organization...'
|
||||
= f.input :code_of_conduct, as: :text,
|
||||
input_html: { rows: 10, data: { provide: 'markdown-editable' } },
|
||||
input_html: { rows: 10, data: { provide: 'markdown' } },
|
||||
hint: markdown_hint,
|
||||
placeholder: 'Rules governing behavior and dispute resolution...'
|
||||
= image_tag f.object.picture.thumb.url if f.object.picture?
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
.col-md-8
|
||||
= semantic_form_for(@resource, :url => (@resource.new_record? ? admin_conference_resources_path : admin_conference_resource_path(@conference.short_title, @resource))) do |f|
|
||||
= f.input :name, input_html: { autofocus: true }
|
||||
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown-editable' } }
|
||||
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown' } }
|
||||
= f.input :used
|
||||
= f.input :quantity
|
||||
%p.text-right
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
.col-md-8
|
||||
= semantic_form_for(@sponsor, url: (@sponsor.new_record? ? admin_conference_sponsors_path : admin_conference_sponsor_path(@conference.short_title, @sponsor))) do |f|
|
||||
= f.input :name, input_html: { autofocus: true }
|
||||
= f.input :description, input_html: { rows: 5, cols: 20, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
||||
= f.input :description, input_html: { rows: 5, cols: 20, data: { provide: 'markdown' } }, hint: markdown_hint
|
||||
= image_tag f.object.picture.thumb.url if f.object.picture?
|
||||
= f.input :picture
|
||||
= f.input :website_url
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
.col-md-8
|
||||
= semantic_form_for(@ticket, url: (@ticket.new_record? ? admin_conference_tickets_path : admin_conference_ticket_path(@conference.short_title, @ticket))) do |f|
|
||||
= f.input :title, input_html: { autofocus: true }
|
||||
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown-editable' } }
|
||||
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown' } }
|
||||
= f.input :price
|
||||
= f.input :price_currency, as: :select, class: 'form-control', collection: ['USD', 'EUR', 'GBP', 'INR', 'CNY', 'CHF'], include_blank: false
|
||||
= f.input :registration_ticket, hint: 'A registration ticket is with which user register for the conference.'
|
||||
|
|
|
|||
|
|
@ -23,6 +23,6 @@
|
|||
with
|
||||
= link_to 'rooms', admin_conference_venue_rooms_path(@conference.short_title)
|
||||
, if you want to select a room for the track.
|
||||
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
||||
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown' } }, hint: markdown_hint
|
||||
= f.input :cfp_active, label: 'Allow event submitters to select this track for their proposal'
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
= f.input :email
|
||||
= f.input :password if @user.new_record?
|
||||
= f.input :affiliation, as: :string
|
||||
= f.input :biography, input_html: { rows: 10, data: { provide: 'markdown-editable' } },
|
||||
= f.input :biography, input_html: { rows: 10, data: { provide: 'markdown' } },
|
||||
hint: markdown_hint
|
||||
= f.actions do
|
||||
= f.action :submit, button_html: {class: 'btn btn-primary'}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
.col-md-8
|
||||
= semantic_form_for(@venue, url: admin_conference_venue_path(@conference.short_title)) do |f|
|
||||
= f.inputs :name, :website
|
||||
= f.input :description, input_html: { rows: 5, cols: 20, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
||||
= f.input :description, input_html: { rows: 5, cols: 20, data: { provide: 'markdown' } }, hint: markdown_hint
|
||||
= f.label 'Venue Logo'
|
||||
%br
|
||||
- if @venue.picture?
|
||||
|
|
|
|||
|
|
@ -15,18 +15,14 @@
|
|||
- role = current_or_last_object_state('Role', object.role_id)
|
||||
- role_name = role.try(:name) || PaperTrail::Version.where(item_type: 'Role', item_id: object.role_id).last.changeset[:name].second
|
||||
role
|
||||
- if role_name == 'organization_admin'
|
||||
- if Organization.find_by(id: version.conference_id)
|
||||
-# organization_admin belongs to organization and not conferences
|
||||
- organization = Organization.find_by(id: version.conference_id)
|
||||
= link_if_alive version, role_name,
|
||||
admins_admin_organization_path(organization), organization
|
||||
- else
|
||||
(Deleted Organization)
|
||||
- else
|
||||
- if version.conference_id
|
||||
- conference = Conference.find_by(id: version.conference_id)
|
||||
- conference_short_title = conference.try(:short_title) || current_or_last_object_state('Conference', version.conference_id).try(:short_title) || ' '
|
||||
= link_if_alive version, role.try(:name), admin_conference_role_path(conference_short_title,role.try(:name) || ' '), conference
|
||||
- elsif version.organization_id
|
||||
- organization = Organization.find(version.organization_id)
|
||||
= link_if_alive version, role_name,
|
||||
admins_admin_organization_path(organization), organization
|
||||
|
||||
= version.event == 'create' ? 'to' : 'from'
|
||||
user
|
||||
|
|
@ -133,19 +129,15 @@
|
|||
- when 'Role'
|
||||
role
|
||||
- role_name = object.try(:name) || PaperTrail::Version.where(item_type: 'Role', item_id: version.item_id).last.changeset[:name].second
|
||||
- if role_name == 'organization_admin'
|
||||
- if Organization.find_by(id: version.conference_id)
|
||||
-# organization_admin belongs to organization and not conferences
|
||||
- organization = Organization.find_by(id: version.conference_id)
|
||||
= link_if_alive version, role_name,
|
||||
admins_admin_organization_path(organization), organization
|
||||
- else
|
||||
(Role Deleted)
|
||||
- else
|
||||
- if version.conference_id
|
||||
- conference = Conference.find_by(id: version.conference_id)
|
||||
- conference_short_title = conference.try(:short_title) || current_or_last_object_state('Conference', version.conference_id).try(:short_title) || ' '
|
||||
= link_if_alive version, role_name,
|
||||
admin_conference_role_path(conference_short_title, role_name), conference
|
||||
- elsif version.organization_id
|
||||
- organization = Organization.find(version.organization_id)
|
||||
= link_if_alive version, role_name,
|
||||
admins_admin_organization_path(organization), organization
|
||||
|
||||
- when 'Venue'
|
||||
venue
|
||||
|
|
@ -203,20 +195,16 @@
|
|||
= link_to_user(version.item_id)
|
||||
|
||||
- unless %w(Conference Subscription Registration User Organization).include?(version.item_type)
|
||||
- if (version.item_type == 'Role' && role_name == 'organization_admin') || (version.item_type == 'UsersRole' && role_name == 'organization_admin')
|
||||
in organization
|
||||
- if Organization.find_by(id: version.conference_id)
|
||||
-# organization_admin belongs to organization and not conferences
|
||||
- organization = Organization.find_by(id: version.conference_id)
|
||||
= link_to_organization(version.conference_id)
|
||||
- else
|
||||
(Organization Deleted)
|
||||
- elsif version.item_type == 'Commercial'
|
||||
- if version.item_type == 'Commercial'
|
||||
- commercial = current_or_last_object_state(version.item_type, version.item_id)
|
||||
- commercialable = current_or_last_object_state(commercial.commercialable_type, commercial.commercialable_id)
|
||||
- unless commercial.commercialable_type == 'Conference'
|
||||
in conference
|
||||
= link_to_conference(version.conference_id)
|
||||
- elsif version.organization_id
|
||||
- organization = Organization.find(version.organization_id)
|
||||
in organization
|
||||
= link_to_organization(version.organization_id)
|
||||
- else
|
||||
in conference
|
||||
= link_to_conference(version.conference_id)
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
.col-md-8
|
||||
= semantic_form_for(@booth, url: @url, html: { multipart: true }) do |f|
|
||||
= f.input :title, as: :string, input_html: { autofocus: true }, required: true
|
||||
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown-editable' } }, required: true,
|
||||
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown' } }, required: true,
|
||||
hint: 'This field becomes public upon request acceptance'
|
||||
= f.input :reasoning, input_html: { rows: 5, data: { provide: 'markdown-editable' } }, required: true,
|
||||
= f.input :reasoning, input_html: { rows: 5, data: { provide: 'markdown' } }, required: true,
|
||||
label: 'How it fits the conference'
|
||||
= f.input :submitter_relationship, input_html: { rows: 5, data: { provide: 'markdown-editable' } }, required: true,
|
||||
= f.input :submitter_relationship, input_html: { rows: 5, data: { provide: 'markdown' } }, required: true,
|
||||
label: 'Submitter\'s relation',
|
||||
hint: 'e.g. employee, comunity manager, etc'
|
||||
= f.input :website_url
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
%span{ class: 'help-block select-help-text collapse event_difficulty_level_id', id: "#{difficulty_level.id}-help" }
|
||||
= difficulty_level.description
|
||||
|
||||
= f.input :abstract, required: true, input_html: { rows: 5, data: { provide: 'markdown-editable' } },
|
||||
= f.input :abstract, required: true, input_html: { rows: 5, data: { provide: 'markdown' } },
|
||||
hint: markdown_hint('[Tips to improve your presentations.](http://blog.hubspot.com/blog/tabid/6307/bid/5975/10-Rules-to-Instantly-Improve-Your-Presentations.aspx)')
|
||||
|
||||
%p
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
collection: @languages,
|
||||
include_blank: false, label: 'Language', input_html: { class: 'select-help-toggle' }
|
||||
|
||||
= f.input :abstract, required: true, input_html: { rows: 5, data: { provide: 'markdown-editable' } },
|
||||
= f.input :abstract, required: true, input_html: { rows: 5, data: { provide: 'markdown' } },
|
||||
hint: markdown_hint
|
||||
|
||||
%p
|
||||
|
|
|
|||
|
|
@ -15,6 +15,6 @@
|
|||
= f.input :color, input_html: {size: 6, type: 'color'}, required: true
|
||||
= f.input :start_date, as: :string, input_html: { id: 'registration-period-start-datepicker', start_date: @conference.start_date, end_date: @conference.end_date, readonly: 'readonly' }
|
||||
= f.input :end_date, as: :string, input_html: { id: 'registration-period-end-datepicker', readonly: 'readonly' }
|
||||
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, required: true, hint: "This will be public #{markdown_hint}".html_safe
|
||||
= f.input :relevance, input_html: {rows: 5, data: { provide: 'markdown-editable' } }, required: true, hint: "Please explain here how this track relates to the conference, how you are related to its content and why we should accept it. #{markdown_hint}".html_safe
|
||||
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown' } }, required: true, hint: "This will be public #{markdown_hint}".html_safe
|
||||
= f.input :relevance, input_html: {rows: 5, data: { provide: 'markdown' } }, required: true, hint: "Please explain here how this track relates to the conference, how you are related to its content and why we should accept it. #{markdown_hint}".html_safe
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
= link_to 'Change your avatar here', 'https://gravatar.com'
|
||||
= f.input :affiliation, as: :string,
|
||||
hint: 'This could be a company, a user group, or nothing at all.'
|
||||
= f.input :biography, input_html: { rows: 5, data: { provide: 'markdown-editable' } },
|
||||
= f.input :biography, input_html: { rows: 5, data: { provide: 'markdown' } },
|
||||
hint: markdown_hint
|
||||
You have used
|
||||
%span#bio_length
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateSurveys < ActiveRecord::Migration
|
||||
class CreateSurveys < ActiveRecord::Migration[5.0]
|
||||
def change
|
||||
create_table :surveys do |t|
|
||||
t.datetime :start_date
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateSurveyQuestions < ActiveRecord::Migration
|
||||
class CreateSurveyQuestions < ActiveRecord::Migration[5.0]
|
||||
def change
|
||||
create_table :survey_questions do |t|
|
||||
t.references :survey
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddTargetToSurveys < ActiveRecord::Migration
|
||||
class AddTargetToSurveys < ActiveRecord::Migration[5.0]
|
||||
def change
|
||||
add_column :surveys, :target, :integer, default: 0
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateSurveyReplies < ActiveRecord::Migration
|
||||
class CreateSurveyReplies < ActiveRecord::Migration[5.0]
|
||||
def change
|
||||
create_table :survey_replies do |t|
|
||||
t.integer :survey_question_id
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateSurveySubmissions < ActiveRecord::Migration
|
||||
class CreateSurveySubmissions < ActiveRecord::Migration[5.0]
|
||||
def change
|
||||
create_table :survey_submissions do |t|
|
||||
t.integer :user_id
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddCommentsCountToEvents < ActiveRecord::Migration
|
||||
class AddCommentsCountToEvents < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :events, :comments_count, :integer, default: 0, null: false
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddDefaultToRevisionInConference < ActiveRecord::Migration
|
||||
class AddDefaultToRevisionInConference < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
change_column :conferences, :revision, :integer, default: 0, null: false
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddEnabledToEventSchedules < ActiveRecord::Migration
|
||||
class AddEnabledToEventSchedules < ActiveRecord::Migration[5.0]
|
||||
def change
|
||||
add_column :event_schedules, :enabled, :boolean, default: true
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateBooths < ActiveRecord::Migration
|
||||
class CreateBooths < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
create_table :booths do |t|
|
||||
t.string :title
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddTypeToCfps < ActiveRecord::Migration
|
||||
class AddTypeToCfps < ActiveRecord::Migration[4.2]
|
||||
class TmpCfp < ActiveRecord::Base
|
||||
self.table_name = 'cfps'
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateBoothRequests < ActiveRecord::Migration
|
||||
class CreateBoothRequests < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
create_table :booth_requests do |t|
|
||||
t.references :booth, index: true, foreign_key: true
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreatePhysicalTickets < ActiveRecord::Migration
|
||||
class CreatePhysicalTickets < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
create_table :physical_tickets do |t|
|
||||
t.integer :ticket_purchase_id, null: false
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddShortNameToTracks < ActiveRecord::Migration
|
||||
class AddShortNameToTracks < ActiveRecord::Migration[4.2]
|
||||
class TmpProgram < ActiveRecord::Base
|
||||
self.table_name = 'programs'
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddTicketLayoutToConferences < ActiveRecord::Migration
|
||||
class AddTicketLayoutToConferences < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :conferences, :ticket_layout, :integer, default: 0
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddStateCfpActiveAndSubmitterReferenceToTracks < ActiveRecord::Migration
|
||||
class AddStateCfpActiveAndSubmitterReferenceToTracks < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :tracks, :state, :string
|
||||
add_column :tracks, :cfp_active, :boolean
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreateTicketScannings < ActiveRecord::Migration
|
||||
class CreateTicketScannings < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
create_table :ticket_scannings do |t|
|
||||
t.integer :physical_ticket_id, null: false
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddRoomAndDatesToTracks < ActiveRecord::Migration
|
||||
class AddRoomAndDatesToTracks < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_reference :tracks, :room, index: true, foreign_key: true
|
||||
add_column :tracks, :start_date, :date
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MakeTrackStateNotNullAndAddDefaultValue < ActiveRecord::Migration
|
||||
class MakeTrackStateNotNullAndAddDefaultValue < ActiveRecord::Migration[4.2]
|
||||
class TmpTrack < ActiveRecord::Base
|
||||
self.table_name = 'tracks'
|
||||
end
|
||||
|
||||
def change
|
||||
TmpTrack.reset_column_information
|
||||
|
||||
TmpTrack.where(state: nil).each do |track|
|
||||
track.state = 'confirmed'
|
||||
track.save!
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MakeTrackCfpActiveNotNull < ActiveRecord::Migration
|
||||
class MakeTrackCfpActiveNotNull < ActiveRecord::Migration[4.2]
|
||||
class TmpTrack < ActiveRecord::Base
|
||||
self.table_name = 'tracks'
|
||||
end
|
||||
|
||||
def change
|
||||
TmpTrack.reset_column_information
|
||||
|
||||
TmpTrack.where(cfp_active: nil).each do |track|
|
||||
track.cfp_active = true
|
||||
track.save!
|
||||
end
|
||||
|
||||
change_column_null :tracks, :cfp_active, false
|
||||
change_column :tracks, :cfp_active, :boolean, null: false, default: false
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddIndexToPhysicalTickets < ActiveRecord::Migration
|
||||
class AddIndexToPhysicalTickets < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :physical_tickets, :token, :string
|
||||
add_index :physical_tickets, :token, unique: true
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddCustomDomainToConferences < ActiveRecord::Migration
|
||||
class AddCustomDomainToConferences < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :conferences, :custom_domain, :string
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddRelevanceToTracks < ActiveRecord::Migration
|
||||
class AddRelevanceToTracks < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :tracks, :relevance, :text
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddIncludeBoothsToSplashpages < ActiveRecord::Migration
|
||||
class AddIncludeBoothsToSplashpages < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :splashpages, :include_booths, :boolean
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddBoothLimitToConferences < ActiveRecord::Migration
|
||||
class AddBoothLimitToConferences < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :conferences, :booth_limit, :integer, default: 0
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddBoothsToEmailSettings < ActiveRecord::Migration
|
||||
class AddBoothsToEmailSettings < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :email_settings, :send_on_booths_acceptance, :boolean, default: false
|
||||
add_column :email_settings, :booths_acceptance_subject, :string
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddRegistrationTicketToTickets < ActiveRecord::Migration
|
||||
class AddRegistrationTicketToTickets < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :tickets, :registration_ticket, :boolean, default: false
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddTrackReferenceToSchedule < ActiveRecord::Migration
|
||||
class AddTrackReferenceToSchedule < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_reference :schedules, :track, index: true, foreign_key: true
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddSelectedScheduleToTracks < ActiveRecord::Migration
|
||||
class AddSelectedScheduleToTracks < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :tracks, :selected_schedule_id, :integer
|
||||
add_index :tracks, :selected_schedule_id
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddDescriptionToCfps < ActiveRecord::Migration
|
||||
class AddDescriptionToCfps < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :cfps, :description, :text
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddAmountPaidToTicketPurchases < ActiveRecord::Migration
|
||||
class AddAmountPaidToTicketPurchases < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :ticket_purchases, :amount_paid, :float, default: 0
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RebuildConferencePictures < ActiveRecord::Migration
|
||||
class RebuildConferencePictures < ActiveRecord::Migration[5.0]
|
||||
def up
|
||||
Conference.all.each do |conference|
|
||||
Conference.where.not(picture: nil).each do |conference|
|
||||
conference.picture.recreate_versions!
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddMastodonToContact < ActiveRecord::Migration
|
||||
class AddMastodonToContact < ActiveRecord::Migration[5.0]
|
||||
def change
|
||||
add_column :contacts, :mastodon, :string
|
||||
end
|
||||
|
|
|
|||
35
db/migrate/20200331214534_add_organization_to_versions.rb
Normal file
35
db/migrate/20200331214534_add_organization_to_versions.rb
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
class AddOrganizationToVersions < ActiveRecord::Migration[5.2]
|
||||
def up
|
||||
add_reference :versions, :organization
|
||||
deconflate
|
||||
end
|
||||
|
||||
def down
|
||||
conflate
|
||||
remove_reference :versions, :organization
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def conflate
|
||||
say 'conflate'
|
||||
|
||||
PaperTrail::Version.where.not(organization_id: nil).each do |version|
|
||||
version.update_attributes conference_id: version.organization_id
|
||||
end
|
||||
end
|
||||
|
||||
def deconflate
|
||||
say 'deconflate'
|
||||
|
||||
PaperTrail::Version.where.not(conference_id: nil).where(item_type: %[Role UsersRole]).each do |version|
|
||||
id = version.conference_id
|
||||
|
||||
if Organization.exists?(id)
|
||||
raise "version #{version.id} conflates organization #{id} with conference #{id}" if Conference.exists?(id)
|
||||
|
||||
version.update_attributes conference_id: nil, organization_id: id
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -10,10 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2018_12_29_233811) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
ActiveRecord::Schema.define(version: 2020_03_31_214534) do
|
||||
|
||||
create_table "answers", force: :cascade do |t|
|
||||
t.string "title"
|
||||
|
|
@ -641,7 +638,9 @@ ActiveRecord::Schema.define(version: 2018_12_29_233811) do
|
|||
t.text "object_changes"
|
||||
t.datetime "created_at"
|
||||
t.integer "conference_id"
|
||||
t.integer "organization_id"
|
||||
t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
|
||||
t.index ["organization_id"], name: "index_versions_on_organization_id"
|
||||
end
|
||||
|
||||
create_table "votes", force: :cascade do |t|
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
version: '2'
|
||||
version: "2.4"
|
||||
|
||||
services:
|
||||
osem:
|
||||
build:
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
version: "2"
|
||||
version: "2.4"
|
||||
|
||||
services:
|
||||
database:
|
||||
image: postgres
|
||||
environment:
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
POSTGRES_PASSWORD: $OSEM_DB_PASSWORD
|
||||
osem:
|
||||
build:
|
||||
context: .
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
version: "2"
|
||||
version: "2.4"
|
||||
|
||||
services:
|
||||
production_database:
|
||||
image: postgres
|
||||
environment:
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
POSTGRES_PASSWORD: $OSEM_DB_PASSWORD
|
||||
volumes:
|
||||
- osem_production_database:/var/lib/postgresql/data/pgdata
|
||||
production_web:
|
||||
|
|
@ -18,6 +19,7 @@ services:
|
|||
env_file: .env.production # see dotenv.example file
|
||||
environment:
|
||||
OSEM_DB_HOST: production_database
|
||||
RAILS_SERVE_STATIC_FILES: 'true'
|
||||
command: /osem/bin/osem-init.sh
|
||||
volumes:
|
||||
- osem_production_web_data:/osem/public/system
|
||||
|
|
|
|||
|
|
@ -32,9 +32,6 @@
|
|||
# OSEM_MEMCACHED_USERNAME='root'
|
||||
# OSEM_MEMCACHED_PASSWORD='1234'
|
||||
|
||||
# The ruby version to use
|
||||
# OSEM_RUBY_VERSION=2.5.0
|
||||
|
||||
# What time is it?
|
||||
# OSEM_TIME_ZONE="UTC"
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,17 @@ FactoryBot.define do
|
|||
biography { '<div id="divInjectedElement"></div>' }
|
||||
end
|
||||
|
||||
factory :organization_admin, parent: :user do
|
||||
transient do
|
||||
organization { create(:organization) }
|
||||
end
|
||||
|
||||
after(:create) do |user, evaluator|
|
||||
user.roles << Role.find_or_create_by(name: 'organization_admin', resource: evaluator.organization)
|
||||
user.save!
|
||||
end
|
||||
end
|
||||
|
||||
factory :organizer, parent: :user do
|
||||
transient do
|
||||
resource { create(:resource) }
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ feature Commercial do
|
|||
expect(page).to have_css("button[type='submit']:disabled", text: 'Save Materials')
|
||||
end
|
||||
|
||||
scenario 'updates a commercial of an event', feature: true, js: true do
|
||||
scenario 'updates materials of an event', feature: true, js: true do
|
||||
commercial = create(:commercial,
|
||||
commercialable_id: event.id,
|
||||
commercialable_type: 'Event')
|
||||
|
|
@ -85,7 +85,6 @@ feature Commercial do
|
|||
click_button 'Update'
|
||||
page.find('#flash')
|
||||
expect(flash).to eq('Materials were successfully updated.')
|
||||
TransactionalCapybara::AjaxHelpers.wait_for_ajax(page)
|
||||
expect(event.commercials.count).to eq(1)
|
||||
commercial.reload
|
||||
expect(commercial.url).to eq('https://www.youtube.com/watch?v=M9bq_alk-sw')
|
||||
|
|
@ -117,8 +116,7 @@ feature Commercial do
|
|||
click_link 'Delete'
|
||||
end
|
||||
page.find('#flash')
|
||||
expect(flash).to eq('Materials were successfully destroyed.')
|
||||
TransactionalCapybara::AjaxHelpers.wait_for_ajax(page)
|
||||
expect(flash).to eq('Materials successfully destroyed.')
|
||||
expect(event.commercials.count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -114,9 +114,12 @@ feature Event do
|
|||
|
||||
visit conference_program_proposals_path(conference.short_title)
|
||||
click_link 'New Proposal'
|
||||
expect(page).to have_selector(".in[id='#{find_field('event[event_type_id]').value}-help']") # End of animation
|
||||
|
||||
fill_in 'event_title', with: 'Example Proposal'
|
||||
select('Example Event Type', from: 'event[event_type_id]')
|
||||
expect(page).to have_selector(".in[id='#{find_field('event[event_type_id]').value}-help']") # End of animation
|
||||
|
||||
fill_in 'event_abstract', with: 'Lorem ipsum abstract'
|
||||
expect(page).to have_text('You have used 3 words')
|
||||
|
||||
|
|
@ -127,7 +130,6 @@ feature Event do
|
|||
|
||||
page.find('#flash')
|
||||
expect(page).to have_content 'Proposal was successfully submitted.'
|
||||
TransactionalCapybara::AjaxHelpers.wait_for_ajax(page)
|
||||
expect(current_path).to eq(conference_program_proposals_path(conference.short_title))
|
||||
expect(Event.count).to eq(expected_count)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -318,17 +318,14 @@ feature 'Version' do
|
|||
end
|
||||
|
||||
context 'organization role', feature: true, versioning: true, js: true do
|
||||
let!(:organization_admin) { create(:organization_admin, organization: conference.organization) }
|
||||
let!(:user) { create(:user) }
|
||||
let!(:role) do
|
||||
Role.find_by(
|
||||
resource_id: conference.organization.id,
|
||||
resource_type: 'Organization'
|
||||
)
|
||||
end
|
||||
|
||||
setup do
|
||||
user.add_role :organization_admin, conference.organization
|
||||
user.remove_role :organization_admin, conference.organization
|
||||
|
||||
sign_in organization_admin
|
||||
visit admin_revision_history_path
|
||||
end
|
||||
|
||||
|
|
@ -392,7 +389,7 @@ feature 'Version' do
|
|||
click_link 'Comments (0)'
|
||||
fill_in 'comment_body', with: 'Sample comment'
|
||||
click_button 'Add Comment'
|
||||
TransactionalCapybara::AjaxHelpers.wait_for_ajax(page)
|
||||
expect(page).to have_text('Comments (1)')
|
||||
Comment.last.destroy
|
||||
PaperTrail::Version.last.reify.save
|
||||
|
||||
|
|
|
|||
|
|
@ -20,9 +20,6 @@ require 'webdrivers'
|
|||
# all migrations applied
|
||||
ActiveRecord::Migration.maintain_test_schema!
|
||||
|
||||
# Keep capybara and the database on the same page
|
||||
require 'transactional_capybara/rspec'
|
||||
|
||||
# Adds rspec helper provided by paper_trail
|
||||
# makes it easier to control when PaperTrail is enabled during testing.
|
||||
require 'paper_trail/frameworks/rspec'
|
||||
|
|
@ -49,10 +46,8 @@ RSpec.configure do |config|
|
|||
# config.mock_with :flexmock
|
||||
# config.mock_with :rr
|
||||
|
||||
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
||||
# examples within a transaction, remove the following line or assign false
|
||||
# instead of true.
|
||||
config.use_transactional_fixtures = false
|
||||
# Test within database transactions
|
||||
config.use_transactional_examples = true
|
||||
|
||||
# Run specs in random order to surface order dependencies. If you find an
|
||||
# order dependency and want to debug it, you can fix the order by providing
|
||||
|
|
@ -78,12 +73,10 @@ RSpec.configure do |config|
|
|||
end
|
||||
|
||||
Capybara.register_driver :chrome_headless do |app|
|
||||
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
|
||||
chromeOptions: { args: %w(headless disable-gpu window-size=1920x1080 no-sandbox) }
|
||||
)
|
||||
Capybara::Selenium::Driver.new(
|
||||
app, browser: :chrome, desired_capabilities: capabilities
|
||||
options = Selenium::WebDriver::Chrome::Options.new(
|
||||
args: %w(headless disable-gpu window-size=1920x1080 no-sandbox)
|
||||
)
|
||||
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
|
||||
end
|
||||
|
||||
Capybara.default_max_wait_time = 10 # seconds
|
||||
|
|
|
|||
|
|
@ -2,16 +2,7 @@
|
|||
|
||||
RSpec.configure do |config|
|
||||
config.before(:suite) do
|
||||
DatabaseCleaner.clean_with(:transaction)
|
||||
DatabaseCleaner.clean_with(:truncation)
|
||||
Rails.application.load_seed
|
||||
end
|
||||
|
||||
config.before(:each) do
|
||||
DatabaseCleaner.start
|
||||
end
|
||||
|
||||
config.after(:each) do |example|
|
||||
TransactionalCapybara::AjaxHelpers.wait_for_ajax(page) if example.metadata[:js]
|
||||
DatabaseCleaner.clean
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@
|
|||
|
||||
# Mock external requests to youtube
|
||||
require 'webmock/rspec'
|
||||
WebMock.disable_net_connect!(allow_localhost: true, allow: /stripe.com/)
|
||||
driver_urls = Webdrivers::Common.subclasses.map do |driver|
|
||||
Addressable::URI.parse(driver.base_url).host
|
||||
end
|
||||
WebMock.disable_net_connect!(allow_localhost: true, allow: [*driver_urls, /stripe.com/])
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.before(:each) do
|
||||
|
|
|
|||
|
|
@ -1,14 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module ActiveRecord
|
||||
class Base
|
||||
mattr_accessor :shared_connection
|
||||
@@shared_connection = nil
|
||||
|
||||
def self.connection
|
||||
@@shared_connection || retrieve_connection
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
|
||||
|
|
@ -9,7 +9,7 @@ RSpec.configure do |config|
|
|||
example_filename += '.html'
|
||||
if RSpec.current_example.exception.present?
|
||||
save_page(example_filename)
|
||||
save_page(example_screenshotname)
|
||||
save_screenshot(example_screenshotname) # rubocop:disable Lint/Debugger
|
||||
# remove the file if the test starts working again
|
||||
else
|
||||
File.unlink(example_filename) if File.exist?(example_filename)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue