More work on feature tests, remove readings

This commit is contained in:
Ari Timonen 2020-03-16 04:35:44 +02:00
parent 9952bf52b5
commit a6eb8bc7b1
14 changed files with 55 additions and 51 deletions

View file

@ -1,8 +1,11 @@
# Development
Currently buggy.
This is just random tips for development. Not a full documentation.
# Handy commands
`docker-compose -f docker-compose.dev.yml exec -u web web /bin/bash`
`docker-compose -f docker-compose.dev.yml restart web`
`docker-compose -f docker-compose.dev.yml exec -u web test /bin/bash`
`docker-compose -f docker-compose.dev.yml restart web`
`docker-compose -f docker-compose.dev.yml exec -u web test bundle exec rspec`
`docker-compose -f docker-compose.dev.yml exec -u web test bundle exec rspec spec/controllers/shoutmsgs_controller_spec.rb`

View file

@ -6,9 +6,14 @@ ENV RAILS_ENV development
RUN adduser web --home /home/web --shell /bin/bash --disabled-password --gecos ""
RUN apt-get update && apt-get -y upgrade \
&& apt-get -y install libmariadb-dev libmariadb-dev-compat nodejs \
zlib1g-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev \
libxslt1-dev imagemagick libmagickwand-dev
&& apt-get -y install \
libmariadb-dev libmariadb-dev-compat \
libssl-dev \
zlib1g-dev libreadline-dev libyaml-dev \
libxslt1-dev libxml2-dev \
imagemagick libmagickwand-dev \
nodejs \
firefox-esr
# Separate Gemfile ADD so that `bundle install` can be cached more effectively
ADD Gemfile Gemfile.lock /var/www/

13
Gemfile
View file

@ -77,17 +77,18 @@ end
group :test do
# gem 'spring'
gem 'simplecov', '~> 0.7.1', require: false
gem 'codeclimate-test-reporter', '~> 0.3.0', require: nil
gem 'database_cleaner', '~> 1.2.0'
gem 'rspec'
gem 'rspec-rails', '~> 3.3.3'
gem 'factory_bot_rails'
gem 'database_cleaner', '~> 1.2.0'
gem 'capybara', '~> 2.4.4'
gem 'poltergeist', '~> 1.6.0'
gem 'selenium-webdriver', '~> 2.47.1'
gem 'factory_bot_rails'
gem 'selenium-webdriver'
gem 'timecop', '~> 0.7.1'
gem 'rspec'
gem 'simplecov', '~> 0.7.1', require: false
gem 'codeclimate-test-reporter', '~> 0.3.0', require: nil
gem 'test-unit', '~> 3.1.3'
gem 'phantomjs', :require => 'phantomjs/poltergeist'
end
group :development, :test do

View file

@ -183,6 +183,7 @@ GEM
nokogiri (1.9.1)
mini_portile2 (~> 2.4.0)
os (0.9.6)
phantomjs (2.1.1.0)
poltergeist (1.6.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
@ -354,6 +355,7 @@ DEPENDENCIES
neat (~> 1.6.0)
newrelic_rpm (~> 3.13.0.299)
nokogiri (~> 1.9.0)
phantomjs
poltergeist (~> 1.6.0)
protected_attributes (~> 1.1.3)
pry-byebug (~> 1.3.2)
@ -368,7 +370,7 @@ DEPENDENCIES
rspec-rails (~> 3.3.3)
sanitize (~> 2.1.0)
sass-rails (~> 5.0.3)
selenium-webdriver (~> 2.47.1)
selenium-webdriver
signet (= 0.11.0)
simplecov (~> 0.7.1)
steam-condenser!

View file

@ -2,7 +2,7 @@ class ShoutmsgsController < ApplicationController
respond_to :html, :js
def index
@shoutmsgs = Shoutmsg.last.typebox
@shoutmsgs = Shoutmsg.typebox
end
def show

View file

@ -66,7 +66,6 @@ class Article < ActiveRecord::Base
before_validation :init_variables, :if => Proc.new{ |model| model.new_record? }
before_save :format_text
after_save :send_notifications
after_destroy :remove_readings
has_view_count
acts_as_readable

View file

@ -49,20 +49,19 @@ class Challenge < ActiveRecord::Base
#validate_on_update :validate_map2
#validate_on_update :validate_status
scope :of_contester,
lambda { |contester| {:conditions => ["contester1_id = ? OR contester2_id = ?", contester.id, contester.id]} }
scope :within_time,
lambda { |from, to| {:conditions => ["match_time > ? AND match_time < ?", from.utc, to.utc]} }
scope :around,
lambda { |time| {:conditions => ["match_time > ? AND match_time < ?", time.ago(MATCH_LENGTH).utc, time.ago(-MATCH_LENGTH).utc]} }
scope :on_week,
lambda { |time| {:conditions => ["match_time > ? and match_time < ?", time.beginning_of_week, time.end_of_week]} }
scope :pending, :conditions => {:status => STATUS_PENDING}
scope :mandatory, :conditions => {:mandatory => true}
scope :future, :conditions => "match_time > UTC_TIMESTAMP()"
scope :past, :conditions => "match_time < UTC_TIMESTAMP()"
scope :category, -> (cat) { where(category_id: cat) }
scope :of_contester, -> (contester) { where("contester1_id = ? OR contester2_id = ?", contester.id, contester.id) }
scope :within_time, -> (from, to) { where("match_time > ? AND match_time < ?", from.utc, to.utc) }
scope :around, -> (time) { where("match_time > ? AND match_time < ?", time.ago(MATCH_LENGTH).utc, time.ago(-MATCH_LENGTH).utc) }
scope :on_week, -> (time) { where("match_time > ? and match_time < ?", time.beginning_of_week, time.end_of_week) }
scope :pending, -> { where(status: STATUS_PENDING) }
scope :mandatory, -> { where(mandatory: true) }
scope :future, -> { where("match_time > UTC_TIMESTAMP()") }
scope :past, -> { where("match_time < UTC_TIMESTAMP()") }
has_one :match
belongs_to :map1, :class_name => "Map"
belongs_to :map2, :class_name => "Map"
belongs_to :user

View file

@ -92,13 +92,6 @@ class Issue < ActiveRecord::Base
bbcode_to_html(solution)
end
# FIXME
def remove_readings
if status_changed? and status == STATUS_SOLVED
Reading.delete_all ["readable_type = 'Issue' AND readable_id = ?", self.id]
end
end
def can_show? cuser
return false unless cuser
return true if cuser.admin?

View file

@ -22,7 +22,6 @@ class Post < ActiveRecord::Base
validates_length_of :text, :in => 1..10000
before_save :parse_text
after_create :remove_readings
after_destroy :remove_topics, :if => Proc.new {|post| post.topic.posts.count == 0}
belongs_to :user
@ -35,13 +34,7 @@ class Post < ActiveRecord::Base
topic.posts.count + 1
end
end
# FIXME
def remove_readings
Reading.delete_all ["readable_type = 'Topic' AND readable_id = ?", topic.id]
Reading.delete_all ["readable_type = 'Forum' AND readable_id = ?", topic.forum.id]
end
def parse_text
if self.text
self.text_parsed = bbcode_to_html(self.text)

View file

@ -224,9 +224,9 @@
<%= render partial: "issues/list", locals: { issues: @user.issues } %>
<% end %>
<% if @user.asssigned_issues.size > 0 %>
<% if @user.assigned_issues.size > 0 %>
<h4>Open issues assigned to you</h4>
<%= render partial: "issues/list", locals: { issues: @user.asssigned_issues } %>
<%= render partial: "issues/list", locals: { issues: @user.assigned_issues } %>
<% end %>
<%= link_to 'New issue', new_issue_path, class: 'button' %>

View file

@ -36,7 +36,7 @@ Ensl::Application.routes.draw do
get 'comments/quote'
resources :comments
resources :shoutmsgs, except: :index
resources :shoutmsgs
resources :teamers
resources :teams
resources :gathers

View file

@ -19,7 +19,7 @@ services:
links:
- db
- memcached
- selenium
#- selenium
#- redis
test:
@ -58,6 +58,7 @@ services:
image: selenium/standalone-chrome-debug
ports:
- 5900:5900
- 4444:4444
db:
# Debug

View file

@ -0,0 +1,3 @@
RSpec.describe UsersController, type: :controller do
end

View file

@ -11,17 +11,20 @@ SimpleCov.start "rails"
require File.expand_path("../../config/environment", __FILE__)
require "rspec/rails"
require "capybara/rspec"
require "capybara/poltergeist"
require "capybara/poltergeist"
Capybara.default_wait_time = 5
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(
app,
timeout: 30,
phantomjs_logger: File.open("/dev/null")
# phantomjs_logger: File.open("/dev/null"),
phantomjs: Phantomjs.path
)
end
Capybara.javascript_driver = :poltergeist
SELENIUM_HOST = ENV['SELENIUM_HOST']
TEST_APP_HOST = ENV['TEST_APP_HOST']
TEST_APP_PORT = ENV['TEST_APP_PORT']
@ -35,10 +38,12 @@ Capybara.register_driver :selenium_remote do |app|
)
end
Capybara.javascript_driver = :selenium_remote
Capybara.server_port = TEST_APP_PORT
Capybara.server_host = '0.0.0.0'
Capybara.app_host = "http://#{TEST_APP_HOST}:#{TEST_APP_PORT}"
#Capybara.javascript_driver = :selenium_remote
#Capybara.javascript_driver = :selenium_remote
#Capybara.server_port = TEST_APP_PORT
#Capybara.server_host = '0.0.0.0'
#Capybara.app_host = "http://#{TEST_APP_HOST}:#{TEST_APP_PORT}"
# This file was generated by the `rails generate rspec:install` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.