Merge pull request #87 from snap-cloud/michael/delint
Setup Pronto and Try Some Delints
This commit is contained in:
commit
86133d7fbe
38 changed files with 236 additions and 138 deletions
1
.flayignore
Normal file
1
.flayignore
Normal file
|
|
@ -0,0 +1 @@
|
|||
spec/**/*.rb
|
||||
24
.github/workflows/pronto.yml
vendored
Normal file
24
.github/workflows/pronto.yml
vendored
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
name: Pronto
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
pronto:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
- run: |
|
||||
git fetch --no-tags --prune --depth=150 origin +refs/heads/*:refs/remotes/origin/*
|
||||
- name: Setup Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
- name: Setup bundler # Install only the linters group.
|
||||
run: bundle config --global set without default development test staging production
|
||||
- name: Install pronto
|
||||
run: bundle install --without default development test staging production
|
||||
- name: Run Pronto
|
||||
run: pronto run -f github_status github_pr -c origin/${{ github.base_ref }}
|
||||
env:
|
||||
PRONTO_PULL_REQUEST_ID: ${{ github.event.pull_request.number }}
|
||||
PRONTO_GITHUB_ACCESS_TOKEN: "${{ github.token }}"
|
||||
|
|
@ -15,6 +15,14 @@ AllCops:
|
|||
|
||||
#################### Style ###########################
|
||||
|
||||
Style/CommentAnnotation:
|
||||
Keywords:
|
||||
- TODO-SNAPCON
|
||||
- TODO
|
||||
- OPTIMIZE
|
||||
- HACK
|
||||
- REVIEW
|
||||
|
||||
##################### Metrics ##################################
|
||||
|
||||
##################### Rails ##################################
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ env:
|
|||
matrix:
|
||||
- TEST_SUITE=ability
|
||||
- TEST_SUITE=features
|
||||
- TEST_SUITE=linters
|
||||
- TEST_SUITE=models
|
||||
- TEST_SUITE=controllers
|
||||
- TEST_SUITE=rest
|
||||
|
|
|
|||
23
Gemfile
23
Gemfile
|
|
@ -115,8 +115,8 @@ end
|
|||
gem 'bootstrap3-datetimepicker-rails', '~> 4.17.47'
|
||||
|
||||
# data tables
|
||||
gem 'jquery-datatables'
|
||||
gem 'ajax-datatables-rails'
|
||||
gem 'jquery-datatables'
|
||||
|
||||
# for charts
|
||||
gem 'chartkick'
|
||||
|
|
@ -141,9 +141,9 @@ gem 'rqrcode'
|
|||
gem 'axlsx', git: 'https://github.com/randym/axlsx.git'
|
||||
gem 'axlsx_rails'
|
||||
|
||||
gem 'sentry-ruby'
|
||||
gem 'sentry-rails'
|
||||
gem 'sentry-delayed_job'
|
||||
gem 'sentry-rails'
|
||||
gem 'sentry-ruby'
|
||||
|
||||
# to make links faster
|
||||
gem 'turbolinks'
|
||||
|
|
@ -225,11 +225,7 @@ gem 'dalli'
|
|||
group :development do
|
||||
# to launch specs when files are modified
|
||||
gem 'guard-rspec'
|
||||
gem 'haml_lint'
|
||||
gem 'spring-commands-rspec'
|
||||
# for static code analisys
|
||||
gem 'rubocop', require: false
|
||||
gem 'rubocop-rspec'
|
||||
# to open mails
|
||||
gem 'letter_opener'
|
||||
# view mail at /letter_opener/
|
||||
|
|
@ -240,6 +236,7 @@ group :development do
|
|||
gem 'web-console'
|
||||
# as development database
|
||||
gem 'sqlite3'
|
||||
# prepend models with db schema
|
||||
gem 'annotate'
|
||||
end
|
||||
|
||||
|
|
@ -272,7 +269,17 @@ group :test do
|
|||
gem 'pdf-inspector', require: "pdf/inspector"
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
group :development, :test, :linters do
|
||||
# as debugger
|
||||
gem 'byebug'
|
||||
gem 'pry'
|
||||
|
||||
# Linters and static analysis.
|
||||
gem 'pronto', require: false
|
||||
gem 'pronto-flay', require: false
|
||||
gem 'pronto-haml', require: false
|
||||
gem 'pronto-rubocop', require: false
|
||||
gem 'rubocop-rspec', require: false
|
||||
|
||||
gem 'haml-lint', require: false
|
||||
end
|
||||
|
|
|
|||
50
Gemfile.lock
50
Gemfile.lock
|
|
@ -184,6 +184,11 @@ GEM
|
|||
fastimage (2.1.4)
|
||||
feature (1.4.0)
|
||||
ffi (1.10.0)
|
||||
flay (2.12.1)
|
||||
erubis (~> 2.7.0)
|
||||
path_expander (~> 1.0)
|
||||
ruby_parser (~> 3.0)
|
||||
sexp_processor (~> 4.0)
|
||||
font-awesome-rails (4.7.0.5)
|
||||
railties (>= 3.2, < 6.1)
|
||||
formatador (0.2.5)
|
||||
|
|
@ -193,6 +198,9 @@ GEM
|
|||
formtastic (>= 3.0)
|
||||
geckodriver-helper (0.23.0)
|
||||
archive-zip (~> 0.7)
|
||||
gitlab (4.17.0)
|
||||
httparty (~> 0.18)
|
||||
terminal-table (~> 1.5, >= 1.5.1)
|
||||
globalid (0.4.2)
|
||||
activesupport (>= 4.2.0)
|
||||
gravtastic (3.2.6)
|
||||
|
|
@ -213,6 +221,8 @@ GEM
|
|||
haml (5.0.4)
|
||||
temple (>= 0.8.0)
|
||||
tilt
|
||||
haml-lint (0.999.999)
|
||||
haml_lint
|
||||
haml-rails (1.0.0)
|
||||
actionpack (>= 4.0.1)
|
||||
activesupport (>= 4.0.1)
|
||||
|
|
@ -236,6 +246,9 @@ GEM
|
|||
htmlentities (4.3.4)
|
||||
http-cookie (1.0.3)
|
||||
domain_name (~> 0.5)
|
||||
httparty (0.18.1)
|
||||
mime-types (~> 3.0)
|
||||
multi_xml (>= 0.5.2)
|
||||
i18n (1.8.9)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n_data (0.8.0)
|
||||
|
|
@ -320,6 +333,9 @@ GEM
|
|||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (>= 1.2, < 3)
|
||||
octokit (4.20.0)
|
||||
faraday (>= 0.9)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
omniauth (1.9.1)
|
||||
hashie (>= 3.4.6)
|
||||
rack (>= 1.6.2, < 3)
|
||||
|
|
@ -349,6 +365,7 @@ GEM
|
|||
parallel (1.18.0)
|
||||
parser (2.6.5.0)
|
||||
ast (~> 2.4.0)
|
||||
path_expander (1.1.0)
|
||||
pdf-core (0.7.0)
|
||||
pdf-inspector (1.3.0)
|
||||
pdf-reader (>= 1.0, < 3.0.a)
|
||||
|
|
@ -375,6 +392,24 @@ GEM
|
|||
rails (>= 3.1.0)
|
||||
prawn-table (0.2.2)
|
||||
prawn (>= 1.3.0, < 3.0.0)
|
||||
pronto (0.11.0)
|
||||
gitlab (~> 4.4, >= 4.4.0)
|
||||
httparty (>= 0.13.7)
|
||||
octokit (~> 4.7, >= 4.7.0)
|
||||
rainbow (>= 2.2, < 4.0)
|
||||
rexml (~> 3.2)
|
||||
rugged (>= 0.23.0, < 1.1.0)
|
||||
thor (>= 0.20.3, < 2.0)
|
||||
pronto-flay (0.11.0)
|
||||
flay (~> 2.8)
|
||||
pronto (~> 0.11.0)
|
||||
pronto-haml (0.11.0)
|
||||
haml_lint (~> 0.23)
|
||||
pronto (~> 0.11.0)
|
||||
rubocop (< 1.0)
|
||||
pronto-rubocop (0.11.1)
|
||||
pronto (~> 0.11.0)
|
||||
rubocop (>= 0.63.1, < 2.0)
|
||||
pry (0.10.4)
|
||||
coderay (~> 1.1.0)
|
||||
method_source (~> 0.8.1)
|
||||
|
|
@ -463,6 +498,7 @@ GEM
|
|||
http-cookie (>= 1.0.2, < 2.0)
|
||||
mime-types (>= 1.16, < 4.0)
|
||||
netrc (~> 0.8)
|
||||
rexml (3.2.4)
|
||||
rolify (5.2.0)
|
||||
rqrcode (0.10.1)
|
||||
chunky_png (~> 1.0)
|
||||
|
|
@ -509,6 +545,7 @@ GEM
|
|||
ruby_parser (3.11.0)
|
||||
sexp_processor (~> 4.9)
|
||||
rubyzip (1.3.0)
|
||||
rugged (1.0.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.7.2)
|
||||
sass-listen (~> 4.0.0)
|
||||
|
|
@ -524,6 +561,9 @@ GEM
|
|||
sassc (2.0.1)
|
||||
ffi (~> 1.9)
|
||||
rake
|
||||
sawyer (0.8.2)
|
||||
addressable (>= 2.3.5)
|
||||
faraday (> 0.8, < 2.0)
|
||||
selectize-rails (0.12.6)
|
||||
selenium-webdriver (3.142.6)
|
||||
childprocess (>= 0.5, < 4.0)
|
||||
|
|
@ -575,6 +615,8 @@ GEM
|
|||
stripe (> 5, < 6)
|
||||
sysexits (1.2.0)
|
||||
temple (0.8.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thor (1.1.0)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.0.9)
|
||||
|
|
@ -663,8 +705,8 @@ DEPENDENCIES
|
|||
geckodriver-helper
|
||||
gravtastic
|
||||
guard-rspec
|
||||
haml-lint
|
||||
haml-rails
|
||||
haml_lint
|
||||
iso-639
|
||||
jquery-datatables
|
||||
jquery-rails
|
||||
|
|
@ -689,6 +731,11 @@ DEPENDENCIES
|
|||
piwik_analytics (~> 1.0.1)
|
||||
prawn-qrcode
|
||||
prawn-rails
|
||||
pronto
|
||||
pronto-flay
|
||||
pronto-haml
|
||||
pronto-rubocop
|
||||
pry
|
||||
puma (~> 3.0)
|
||||
rails (~> 5.2)
|
||||
rails-assets-bootstrap-markdown!
|
||||
|
|
@ -713,7 +760,6 @@ DEPENDENCIES
|
|||
rqrcode
|
||||
rspec-activemodel-mocks
|
||||
rspec-rails
|
||||
rubocop
|
||||
rubocop-rspec
|
||||
ruby-oembed
|
||||
sass-rails (>= 4.0.2)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ module Admin
|
|||
|
||||
def index
|
||||
@events = Event.accessible_by(current_ability).where(program: @program,
|
||||
state: [:confirmed, :unconfirmed])
|
||||
state: [:confirmed, :unconfirmed])
|
||||
@events_commercials = Commercial.where(commercialable_type: 'Event', commercialable_id: @events.pluck(:id))
|
||||
@events_missing_commercial = @events.where.not(id: @events_commercials.pluck(:commercialable_id))
|
||||
@events_with_requirements = @events.where.not(description: ['', nil])
|
||||
|
|
|
|||
|
|
@ -10,21 +10,21 @@ class ApplicationController < ActionController::Base
|
|||
check_authorization unless: :devise_controller?
|
||||
skip_authorization_check if:
|
||||
|
||||
def store_location
|
||||
# store last url - this is needed for post-login redirect to whatever the user last visited.
|
||||
return unless request.get?
|
||||
def store_location
|
||||
# store last url - this is needed for post-login redirect to whatever the user last visited.
|
||||
return unless request.get?
|
||||
|
||||
if (request.path != '/accounts/sign_in' &&
|
||||
request.path != '/accounts/sign_up' &&
|
||||
request.path != '/accounts/password/new' &&
|
||||
request.path != '/accounts/password/edit' &&
|
||||
request.path != '/accounts/confirmation' &&
|
||||
request.path != '/accounts/sign_out' &&
|
||||
request.path != '/users/ichain_registration/ichain_sign_up' &&
|
||||
!request.path.starts_with?(Devise.ichain_base_url) &&
|
||||
!request.xhr?) # don't store ajax calls
|
||||
session[:return_to] = request.fullpath
|
||||
end
|
||||
if (request.path != '/accounts/sign_in' &&
|
||||
request.path != '/accounts/sign_up' &&
|
||||
request.path != '/accounts/password/new' &&
|
||||
request.path != '/accounts/password/edit' &&
|
||||
request.path != '/accounts/confirmation' &&
|
||||
request.path != '/accounts/sign_out' &&
|
||||
request.path != '/users/ichain_registration/ichain_sign_up' &&
|
||||
!request.path.starts_with?(Devise.ichain_base_url) &&
|
||||
!request.xhr?) # don't store ajax calls
|
||||
session[:return_to] = request.fullpath
|
||||
end
|
||||
end
|
||||
|
||||
def after_sign_in_path_for(_resource)
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ class ConferenceRegistrationsController < ApplicationController
|
|||
end
|
||||
elsif @conference.registration_ticket_required? && !current_user.supports?(@conference)
|
||||
redirect_to conference_tickets_path(@conference.short_title),
|
||||
error: 'You must buy a registration ticket before registering.'
|
||||
error: 'You must buy a registration ticket before registering.'
|
||||
else
|
||||
flash.now[:error] = "Could not create your registration for #{@conference.title}: "\
|
||||
"#{@registration.errors.full_messages.join('. ')}."
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class UsersController < ApplicationController
|
|||
|
||||
def user_params
|
||||
params.require(:user).permit(:name, :biography, :nickname, :affiliation,
|
||||
:picture, :picture_cache)
|
||||
:picture, :picture_cache)
|
||||
end
|
||||
|
||||
# Somewhat of a hack: users/current/edit
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
# frozen_string_literal: true
|
||||
|
||||
class UserDatatable < AjaxDatatablesRails::Base
|
||||
|
|
|
|||
|
|
@ -188,7 +188,8 @@ module ApplicationHelper
|
|||
'hidden' if Date.today > conference.end_date
|
||||
end
|
||||
|
||||
# TODO:Snap!Con: Replace this with a search for a conference logo.
|
||||
# TODO-SNAPCON: Replace this with a search for a conference logo.
|
||||
# TODO: If conference is defined, the alt text should be conference name.
|
||||
def nav_root_link_for(conference = nil)
|
||||
path = conference&.id.present? ? conference_path(conference) : root_path
|
||||
link_to(
|
||||
|
|
@ -201,8 +202,8 @@ module ApplicationHelper
|
|||
|
||||
def nav_link_text(conference)
|
||||
conference.try(:organization).try(:name) ||
|
||||
ENV['OSEM_NAME'] ||
|
||||
'OSEM'
|
||||
ENV['OSEM_NAME'] ||
|
||||
'OSEM'
|
||||
end
|
||||
|
||||
# returns the url to be used for logo on basis of sponsorship level position
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ module ConferenceHelper
|
|||
|
||||
def short_ticket_description(ticket)
|
||||
return unless ticket.description
|
||||
|
||||
markdown(ticket.description.split("\n").first&.strip)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ module EventsHelper
|
|||
conference_id,
|
||||
event.id,
|
||||
event.send(attribute),
|
||||
url: admin_conference_program_event_path(
|
||||
url: admin_conference_program_event_path(
|
||||
conference_id,
|
||||
event,
|
||||
event: { attribute => nil }
|
||||
|
|
@ -183,7 +183,7 @@ module EventsHelper
|
|||
if current_user.roles.where(id: conference.roles).any?
|
||||
# Show Pre-Event links for any memeber of the conference team.
|
||||
link_to("Join Live Event #{'(Admin link)' unless is_now}",
|
||||
event.url, target: '_blank')
|
||||
event.url, target: '_blank')
|
||||
elsif current_user.registered_to_event?(conference)
|
||||
if is_now
|
||||
link_to('Join Live Event', event.url, target: '_blank')
|
||||
|
|
@ -206,12 +206,12 @@ module EventsHelper
|
|||
start_timestamp = calendar_timestamp(event_schedule.start_time, conference.timezone)
|
||||
end_timestamp = calendar_timestamp(event_schedule.end_time, conference.timezone)
|
||||
event_details = {
|
||||
action: 'TEMPLATE',
|
||||
text: "#{event.title} at #{conference.title}",
|
||||
details: calendar_event_text(event, event_schedule, conference),
|
||||
action: 'TEMPLATE',
|
||||
text: "#{event.title} at #{conference.title}",
|
||||
details: calendar_event_text(event, event_schedule, conference),
|
||||
location: "#{event.room.name} #{event.url}",
|
||||
dates: "#{start_timestamp}/#{end_timestamp}",
|
||||
ctz: event_schedule.timezone
|
||||
dates: "#{start_timestamp}/#{end_timestamp}",
|
||||
ctz: event_schedule.timezone
|
||||
}
|
||||
"#{calendar_base}?#{event_details.to_param}"
|
||||
end
|
||||
|
|
@ -220,13 +220,13 @@ module EventsHelper
|
|||
|
||||
def calendar_event_text(event, event_schedule, conference)
|
||||
<<~TEXT
|
||||
#{conference.title} - #{event.title}
|
||||
#{event_schedule.start_time.strftime("%Y %B %e - %H:%M")} #{event_schedule.timezone}
|
||||
#{conference.title} - #{event.title}
|
||||
#{event_schedule.start_time.strftime('%Y %B %e - %H:%M')} #{event_schedule.timezone}
|
||||
|
||||
More Info: #{conference_program_proposal_url(conference, event)}
|
||||
Join: #{event.url}
|
||||
More Info: #{conference_program_proposal_url(conference, event)}
|
||||
Join: #{event.url}
|
||||
|
||||
#{truncate(event.abstract, length: 200)}
|
||||
#{truncate(event.abstract, length: 200)}
|
||||
TEXT
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -184,12 +184,12 @@ module FormatHelper
|
|||
return '' if text.nil?
|
||||
|
||||
options = {
|
||||
autolink: true,
|
||||
autolink: true,
|
||||
space_after_headers: true,
|
||||
tables: true,
|
||||
strikethrough: true,
|
||||
footnotes: true,
|
||||
superscript: true
|
||||
tables: true,
|
||||
strikethrough: true,
|
||||
footnotes: true,
|
||||
superscript: true
|
||||
}
|
||||
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html: escape_html), options)
|
||||
markdown.render(text).html_safe
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ class Conference < ApplicationRecord
|
|||
has_many :highlighted_events,
|
||||
-> { where(state: :confirmed, is_highlight: true) },
|
||||
through: :program,
|
||||
source: :events
|
||||
source: :events
|
||||
has_many :event_types, through: :program
|
||||
|
||||
has_many :surveys, as: :surveyable, dependent: :destroy do
|
||||
|
|
|
|||
|
|
@ -310,7 +310,6 @@ class Event < ApplicationRecord
|
|||
event_schedules.find_by(schedule_id: selected_schedule_id).try(:happening_now?)
|
||||
end
|
||||
|
||||
|
||||
##
|
||||
# Returns true or false, if the event is already over or not
|
||||
#
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
#
|
||||
class EventUser < ApplicationRecord
|
||||
ROLES = [%w[Speaker speaker], %w[Submitter submitter], %w[Moderator moderator],
|
||||
%w[Volunteer volunteer]]
|
||||
%w[Volunteer volunteer]]
|
||||
|
||||
belongs_to :event, touch: true
|
||||
belongs_to :user
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class Payment < ApplicationRecord
|
|||
end
|
||||
|
||||
def stripe_description
|
||||
#"ticket purchases(#{user.username})"
|
||||
# "ticket purchases(#{user.username})"
|
||||
"Tickets for #{conference.title} #{user.name} #{user.email}"
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ class Registration < ApplicationRecord
|
|||
|
||||
def user_has_registration_ticket
|
||||
return if conference.registration_ticket_required? &&
|
||||
TicketPurchase.where(user: user, ticket: conference.registration_tickets).paid.any?
|
||||
TicketPurchase.where(user: user, ticket: conference.registration_tickets).paid.any?
|
||||
|
||||
errors.add(:base, 'You must purchase a registration ticket before registering')
|
||||
if TicketPurchase.where(user: user, ticket: conference.registration_tickets).unpaid.any?
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ end
|
|||
def count_purchased_registration_tickets(conference, purchases)
|
||||
# TODO: WHAT CAUSED THIS???
|
||||
return 0 unless purchases
|
||||
|
||||
conference.tickets.for_registration.inject(0) do |sum, registration_ticket|
|
||||
sum + purchases[registration_ticket.id.to_s].to_i
|
||||
end
|
||||
|
|
|
|||
|
|
@ -101,9 +101,8 @@ class User < ApplicationRecord
|
|||
[:database_authenticatable, :registerable,
|
||||
:recoverable, :rememberable, :trackable, :validatable, :confirmable,
|
||||
:omniauthable,
|
||||
omniauth_providers: [:suse, :google, :facebook, :github, :discourse]
|
||||
omniauth_providers: [:suse, :google, :facebook, :github, :discourse]]
|
||||
# omniauth_providers: [:google, :discourse]
|
||||
]
|
||||
end
|
||||
|
||||
devise(*devise_modules)
|
||||
|
|
@ -206,6 +205,7 @@ class User < ApplicationRecord
|
|||
# Partials should *not* directly call `gravatar_url`
|
||||
def profile_picture(opts = {})
|
||||
return gravatar_url(opts) unless picture.present?
|
||||
|
||||
size = (opts[:size] || 0).to_i
|
||||
if size < 50
|
||||
picture.tiny.url
|
||||
|
|
@ -346,7 +346,6 @@ class User < ApplicationRecord
|
|||
events.where(program_id: conference.program.id, 'event_users.event_role': 'volunteer')
|
||||
end
|
||||
|
||||
|
||||
def self.empty?
|
||||
User.count == 1 && User.first.email == 'deleted@localhost.osem'
|
||||
end
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ Devise.setup do |config|
|
|||
name: 'google',
|
||||
scope: 'email'
|
||||
|
||||
# TODO (snapcon): This ought to be configurable. Use OSEM_DISCOURSE_KEY?
|
||||
# TODO-SNAPCON: This ought to be configurable. Use OSEM_DISCOURSE_KEY?
|
||||
config.omniauth :discourse,
|
||||
sso_url: 'https://forum.snap.berkeley.edu/session/sso_provider',
|
||||
sso_url: 'https://forum.snap.berkeley.edu/session/sso_provider',
|
||||
sso_secret: ENV['OSEM_DISCOURSE_SECRET']
|
||||
|
||||
config.omniauth :facebook,
|
||||
|
|
|
|||
|
|
@ -46,9 +46,9 @@ end
|
|||
lowlevel_error_handler do |ex, env|
|
||||
Sentry.capture_exception(
|
||||
ex,
|
||||
:message => ex.message,
|
||||
:extra => { :puma => env },
|
||||
:transaction => "Puma"
|
||||
message: ex.message,
|
||||
extra: { puma: env },
|
||||
transaction: "Puma"
|
||||
)
|
||||
# note the below is just a Rack response
|
||||
[500, {}, ["An error has occurred, and engineers have been informed. Please reload the page. If you continue to have problems, contact conference@snap.berkeley.edu\n"]]
|
||||
|
|
|
|||
|
|
@ -7,51 +7,51 @@ if Rails.env.development?
|
|||
# You can override any of these by setting an environment variable of the
|
||||
# same name.
|
||||
Annotate.set_defaults(
|
||||
'active_admin' => 'false',
|
||||
'additional_file_patterns' => [],
|
||||
'routes' => 'false',
|
||||
'models' => 'true',
|
||||
'position_in_routes' => 'before',
|
||||
'position_in_class' => 'before',
|
||||
'position_in_test' => 'before',
|
||||
'position_in_fixture' => 'before',
|
||||
'position_in_factory' => 'before',
|
||||
'position_in_serializer' => 'before',
|
||||
'show_foreign_keys' => 'true',
|
||||
'show_complete_foreign_keys' => 'false',
|
||||
'show_indexes' => 'true',
|
||||
'simple_indexes' => 'false',
|
||||
'model_dir' => 'app/models',
|
||||
'root_dir' => '',
|
||||
'include_version' => 'false',
|
||||
'require' => '',
|
||||
'exclude_tests' => 'false',
|
||||
'exclude_fixtures' => 'false',
|
||||
'exclude_factories' => 'false',
|
||||
'exclude_serializers' => 'false',
|
||||
'exclude_scaffolds' => 'true',
|
||||
'exclude_controllers' => 'true',
|
||||
'exclude_helpers' => 'true',
|
||||
'exclude_sti_subclasses' => 'false',
|
||||
'ignore_model_sub_dir' => 'false',
|
||||
'ignore_columns' => nil,
|
||||
'ignore_routes' => nil,
|
||||
'ignore_unknown_models' => 'false',
|
||||
'hide_limit_column_types' => 'integer,bigint,boolean',
|
||||
'hide_default_column_types' => 'json,jsonb,hstore',
|
||||
'skip_on_db_migrate' => 'false',
|
||||
'format_bare' => 'true',
|
||||
'format_rdoc' => 'false',
|
||||
'format_yard' => 'false',
|
||||
'format_markdown' => 'false',
|
||||
'sort' => 'false',
|
||||
'force' => 'false',
|
||||
'frozen' => 'false',
|
||||
'classified_sort' => 'true',
|
||||
'trace' => 'false',
|
||||
'wrapper_open' => nil,
|
||||
'wrapper_close' => nil,
|
||||
'with_comment' => 'true'
|
||||
'active_admin' => 'false',
|
||||
'additional_file_patterns' => [],
|
||||
'routes' => 'false',
|
||||
'models' => 'true',
|
||||
'position_in_routes' => 'before',
|
||||
'position_in_class' => 'before',
|
||||
'position_in_test' => 'before',
|
||||
'position_in_fixture' => 'before',
|
||||
'position_in_factory' => 'before',
|
||||
'position_in_serializer' => 'before',
|
||||
'show_foreign_keys' => 'true',
|
||||
'show_complete_foreign_keys' => 'false',
|
||||
'show_indexes' => 'true',
|
||||
'simple_indexes' => 'false',
|
||||
'model_dir' => 'app/models',
|
||||
'root_dir' => '',
|
||||
'include_version' => 'false',
|
||||
'require' => '',
|
||||
'exclude_tests' => 'false',
|
||||
'exclude_fixtures' => 'false',
|
||||
'exclude_factories' => 'false',
|
||||
'exclude_serializers' => 'false',
|
||||
'exclude_scaffolds' => 'true',
|
||||
'exclude_controllers' => 'true',
|
||||
'exclude_helpers' => 'true',
|
||||
'exclude_sti_subclasses' => 'false',
|
||||
'ignore_model_sub_dir' => 'false',
|
||||
'ignore_columns' => nil,
|
||||
'ignore_routes' => nil,
|
||||
'ignore_unknown_models' => 'false',
|
||||
'hide_limit_column_types' => 'integer,bigint,boolean',
|
||||
'hide_default_column_types' => 'json,jsonb,hstore',
|
||||
'skip_on_db_migrate' => 'false',
|
||||
'format_bare' => 'true',
|
||||
'format_rdoc' => 'false',
|
||||
'format_yard' => 'false',
|
||||
'format_markdown' => 'false',
|
||||
'sort' => 'false',
|
||||
'force' => 'false',
|
||||
'frozen' => 'false',
|
||||
'classified_sort' => 'true',
|
||||
'trace' => 'false',
|
||||
'wrapper_open' => nil,
|
||||
'wrapper_close' => nil,
|
||||
'with_comment' => 'true'
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ describe Admin::ConferencesController do
|
|||
expect(response).to render_template :show
|
||||
end
|
||||
|
||||
# TODO (snapcon): This is currently disabled due to slow performance.
|
||||
# TODO-SNAPCON: This is currently disabled due to slow performance.
|
||||
skip 'assigns conference withdrawn events distribution to event_type_distribution_withdrawn' do
|
||||
conference
|
||||
create(:event, program: conference.program)
|
||||
|
|
@ -122,7 +122,7 @@ describe Admin::ConferencesController do
|
|||
expect(assigns(:event_type_distribution_withdrawn)).to eq(result)
|
||||
end
|
||||
|
||||
# TODO (snapcon): This is currently disabled due to slow performance.
|
||||
# TODO-SNAPCON: This is currently disabled due to slow performance.
|
||||
skip 'assigns conference withdrawn difficulty level distribution to difficulty_levels_distribution_withdrawn' do
|
||||
conference
|
||||
create(:event, program: conference.program)
|
||||
|
|
@ -146,7 +146,7 @@ describe Admin::ConferencesController do
|
|||
expect(assigns(:difficulty_levels_distribution_withdrawn)).to eq(result)
|
||||
end
|
||||
|
||||
# TODO (snapcon): This is currently disabled due to slow performance.
|
||||
# TODO-SNAPCON: This is currently disabled due to slow performance.
|
||||
skip 'assigns conference withdrawn track distribution to tracks_distribution_withdrawn' do
|
||||
conference
|
||||
create(:event, program: conference.program)
|
||||
|
|
|
|||
|
|
@ -69,8 +69,8 @@ describe Admin::TicketsController do
|
|||
it 'creates new ticket' do
|
||||
expect do
|
||||
post :create, params: {
|
||||
ticket: attributes_for(:ticket),
|
||||
conference_id: conference
|
||||
ticket: attributes_for(:ticket),
|
||||
conference_id: conference
|
||||
}
|
||||
end.to change{ conference.tickets.count }.from(ticket_count).to(ticket_count + 1)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ describe UserDatatable do
|
|||
end
|
||||
|
||||
let(:data_cols) do
|
||||
[:id, :confirmed_at, :email, :name, :attended, :roles, :view_url, :edit_url, :DT_RowId]
|
||||
[:id, :confirmed_at, :email, :name, :username, :attended, :roles, :view_url, :edit_url, :DT_RowId]
|
||||
end
|
||||
let(:view) do
|
||||
view = double(
|
||||
|
|
|
|||
|
|
@ -68,8 +68,8 @@ feature Commercial do
|
|||
end
|
||||
|
||||
scenario 'does not add an invalid commercial of an event', feature: true, js: true do
|
||||
# TODO (snapcon)
|
||||
skip("Snap!Con allows all materials to be saved.")
|
||||
# TODO-SNAPCON
|
||||
skip('Snap!Con allows all materials to be saved.')
|
||||
visit edit_conference_program_proposal_path(conference.short_title, event.id)
|
||||
click_link 'Materials'
|
||||
fill_in 'commercial_url', with: 'invalid_commercial_url'
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ feature 'Has correct abilities' do
|
|||
other_user = create(:user)
|
||||
ticket = conference.registration_tickets.first
|
||||
create(:paid_ticket_purchase,
|
||||
user: other_user, ticket: ticket, quantity: 1, conference: conference)
|
||||
user: other_user, ticket: ticket, quantity: 1, conference: conference)
|
||||
create(:registration, user: other_user, conference: conference)
|
||||
visit edit_admin_conference_registration_path(conference.short_title, conference.registrations.first)
|
||||
expect(current_path).to eq(edit_admin_conference_registration_path(conference.short_title, conference.registrations.first))
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ feature 'Has correct abilities' do
|
|||
expect(page).to_not have_link('New Conference', href: '/admin/conferences/new')
|
||||
|
||||
visit admin_conference_path(other_conference.short_title)
|
||||
# TODO (snapcon): This conference already seems to have a venue.
|
||||
# TODO-SNAPCON: This conference already seems to have a venue.
|
||||
# expect(page).to have_link('Add venue', href: "/admin/conferences/#{other_conference.short_title}/venue/new")
|
||||
|
||||
visit edit_admin_conference_path(conference.short_title)
|
||||
|
|
@ -200,7 +200,7 @@ feature 'Has correct abilities' do
|
|||
other_user = create(:user)
|
||||
ticket = conference.registration_tickets.first
|
||||
create(:paid_ticket_purchase,
|
||||
user: other_user, ticket: ticket, quantity: 1, conference: conference)
|
||||
user: other_user, ticket: ticket, quantity: 1, conference: conference)
|
||||
create(:registration, user: other_user, conference: conference)
|
||||
visit edit_admin_conference_registration_path(conference.short_title, conference.registrations.first)
|
||||
expect(current_path).to eq(edit_admin_conference_registration_path(conference.short_title, conference.registrations.first))
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ 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}")
|
||||
end
|
||||
|
||||
# TODO (snapcon): Figure out why this is failing!!
|
||||
# TODO-SNAPCON: Figure out why this is failing!!
|
||||
skip 'display changes in splashpages', feature: true, versioning: true, js: true do
|
||||
visit admin_conference_splashpage_path(conference.short_title)
|
||||
click_link 'Create Splashpage'
|
||||
|
|
@ -300,7 +300,7 @@ feature 'Version' do
|
|||
|
||||
visit admin_conference_program_event_path(conference.short_title, event_with_commercial)
|
||||
click_link 'History'
|
||||
# TODO (snapcon): Figure out why this is here...
|
||||
# TODO-SNAPCON: Figure out why this is here...
|
||||
# expect(page).to have_text('Someone (probably via the console) created new commercial')
|
||||
visit admin_conference_program_event_path(conference.short_title, event_without_commercial)
|
||||
click_link 'History'
|
||||
|
|
|
|||
|
|
@ -62,22 +62,36 @@ describe ApplicationHelper, type: :helper do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'navigation title link' do
|
||||
describe 'navigation image link' do
|
||||
it 'should default to OSEM' do
|
||||
ENV.delete('OSEM_NAME')
|
||||
# TODO:Snap!Con: expect(nav_root_link_for(nil)).to match 'OSEM'
|
||||
expect(nav_root_link_for(nil)).to match image_tag('snapcon_logo.png')
|
||||
expect(nav_root_link_for(nil)).to include image_tag('snapcon_logo.png', alt: 'OSEM')
|
||||
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'])
|
||||
expect(nav_root_link_for(nil)).to match image_tag('snapcon_logo.png')
|
||||
expect(nav_root_link_for(nil)).to include image_tag('snapcon_logo.png', alt: ENV['OSEM_NAME'])
|
||||
end
|
||||
|
||||
# TODO-SNAPCON: This is an indicator in a conference it should be the conference name.
|
||||
it 'should use the conference organization name' do
|
||||
expect(nav_root_link_for(conference)).to include image_tag('snapcon_logo.png', alt: conference.organization.name)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'navigation link titke text' do
|
||||
it 'should default to OSEM' do
|
||||
ENV.delete('OSEM_NAME')
|
||||
expect(nav_link_text(nil)).to match 'OSEM'
|
||||
end
|
||||
|
||||
it 'should use the environment variable' do
|
||||
ENV['OSEM_NAME'] = Faker::Company.name + "'"
|
||||
expect(nav_link_text(nil)).to match ENV['OSEM_NAME']
|
||||
end
|
||||
|
||||
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(nil)).to match image_tag('snapcon_logo.png')
|
||||
expect(nav_link_text(conference)).to match conference.organization.name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -13,12 +13,12 @@ describe FormatHelper, type: :helper do
|
|||
expect(Redcarpet::Markdown).to receive(:new)
|
||||
.with(
|
||||
Redcarpet::Render::HTML,
|
||||
autolink: true,
|
||||
autolink: true,
|
||||
space_after_headers: true,
|
||||
tables: true,
|
||||
strikethrough: true,
|
||||
footnotes: true,
|
||||
superscript: true
|
||||
tables: true,
|
||||
strikethrough: true,
|
||||
footnotes: true,
|
||||
superscript: true
|
||||
)
|
||||
.and_call_original
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
#
|
||||
# index_conferences_on_organization_id (organization_id)
|
||||
#
|
||||
#!/bin/env ruby
|
||||
# !/bin/env ruby
|
||||
require 'spec_helper'
|
||||
|
||||
describe Conference do
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ describe Registration do
|
|||
|
||||
describe 'association' do
|
||||
it { is_expected.to belong_to(:user) }
|
||||
# TODO (snapcon): This fails because conference is nil, but obviously this works...
|
||||
# TODO-SNAPCON: This fails because conference is nil, but obviously this works...
|
||||
# it { is_expected.to belong_to(:conference) }
|
||||
it { is_expected.to have_and_belong_to_many(:qanswers) }
|
||||
it { is_expected.to have_and_belong_to_many(:vchoices) }
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ def mock_commercial_request
|
|||
end
|
||||
|
||||
def mock_image_request
|
||||
WebMock.stub_request(:post, "https://api.cloudinary.com/v1_1/snapcon/image/destroy").
|
||||
to_return(status: 200, body: {}.to_json, headers: {})
|
||||
# TODO-SNAPCON: This needs to be configurable somehow.
|
||||
WebMock.stub_request(:post, 'https://api.cloudinary.com/v1_1/snapcon/image/destroy')
|
||||
.to_return(status: 200, body: {}.to_json, headers: {})
|
||||
end
|
||||
|
|
|
|||
|
|
@ -15,8 +15,6 @@ module OmniauthMacros
|
|||
ENV['OSEM_DISCOURSE_KEY'] = 'test key discourse'
|
||||
ENV['OSEM_DISCOURSE_SECRET'] = 'test secret discourse'
|
||||
|
||||
|
||||
|
||||
def mock_auth_new_user
|
||||
OmniAuth.config.mock_auth[:google] =
|
||||
OmniAuth::AuthHash.new(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue