diff options
-rw-r--r-- | .gitlab-ci.yml | 17 | ||||
-rw-r--r-- | .travis.yml | 8 | ||||
-rw-r--r-- | app/models/user.rb | 3 | ||||
-rw-r--r-- | lib/temporary_user.rb (renamed from app/models/temporary_user.rb) | 32 | ||||
-rw-r--r-- | test/config/gitlab/couchdb.yml | 3 | ||||
-rw-r--r-- | test/config/travis/couchdb.admin.yml (renamed from test/config/couchdb.admin.yml) | 3 | ||||
-rw-r--r-- | test/config/travis/couchdb.yml (renamed from test/config/couchdb.yml) | 1 | ||||
-rw-r--r-- | test/config/travis/ruby-version (renamed from test/travis/ruby-version) | 0 | ||||
-rwxr-xr-x | test/config/travis/setup_couch.sh (renamed from test/travis/setup_couch.sh) | 0 | ||||
-rw-r--r-- | test/unit/temporary_user_test.rb | 28 |
10 files changed, 55 insertions, 40 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index df920d0..01c4103 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,7 @@ image: "ruby:2.1" # Check out: http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-service services: - couchdb:1.6.1 - + # Cache gems in between builds cache: paths: @@ -17,13 +17,16 @@ cache: # This is a basic example for a gem or script which doesn't use # services such as redis or postgres before_script: - - ruby -v # Print out ruby version for debugging - - gem install bundler --no-ri --no-rdoc # Bundler is not installed with the image - - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby - - export RAILS_ENV=test + - ruby -v + - curl -s couchdb:5984 + - git submodule update --init + - cp test/config/gitlab/couchdb.yml config/couchdb.admin.yml + - cp test/config/gitlab/couchdb.yml config + - gem install bundler --no-ri --no-rdoc + - bundle install -j $(nproc) --path vendor --without development debug + - bundle exec rake RAILS_ENV=test db:rotate + - bundle exec rake RAILS_ENV=test db:migrate rails: script: - - bundle exec rake db:rotate - - bundle exec rake db:migrate - bundle exec rake test diff --git a/.travis.yml b/.travis.yml index 4e7aad0..2681951 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,10 +6,10 @@ before_install: - "gem install bundler --version 1.11.2" before_script: - "rm .ruby-version" - - "mv test/travis/ruby-version .ruby-version" - - "test/travis/setup_couch.sh" - - "mv test/config/couchdb.admin.yml config/couchdb.admin.yml" - - "mv test/config/couchdb.yml config/couchdb.yml" + - "mv test/config/travis/ruby-version .ruby-version" + - "test/config/travis/setup_couch.sh" + - "mv test/config/travis/couchdb.admin.yml config/couchdb.admin.yml" + - "mv test/config/travis/couchdb.yml config/couchdb.yml" - "bundle exec rake RAILS_ENV=test db:rotate" - "bundle exec rake RAILS_ENV=test db:migrate" after_script: diff --git a/app/models/user.rb b/app/models/user.rb index 93830cc..9cebbca 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,11 +1,10 @@ require 'login_format_validation' require 'local_email' +require 'temporary_user' class User < CouchRest::Model::Base include LoginFormatValidation - use_database :users - property :login, String, :accessible => true property :password_verifier, String, :accessible => true property :password_salt, String, :accessible => true diff --git a/app/models/temporary_user.rb b/lib/temporary_user.rb index 2afae15..d0db1c4 100644 --- a/app/models/temporary_user.rb +++ b/lib/temporary_user.rb @@ -12,16 +12,13 @@ module TemporaryUser extend ActiveSupport::Concern - include CouchRest::Model::DatabaseMethod - USER_DB = 'users' + USER_DB = 'users' TMP_USER_DB = 'tmp_users' TMP_LOGIN = 'tmp_user' # created and deleted frequently TEST_LOGIN = 'test_user' # created, rarely deleted included do - use_database_method :db_name - # since the original find_by_login is dynamically created with # instance_eval, it appears that we also need to use instance eval to # override it. @@ -42,20 +39,15 @@ module TemporaryUser end alias :find :get - # calls db_name(TMP_LOGIN), then creates a CouchRest::Database - # from the name - def tmp_database - choose_database(TMP_LOGIN) + def database + @database ||= prepare_database USER_DB end - def db_name(login=nil) - if !login.nil? && login.include?(TMP_LOGIN) - TMP_USER_DB - else - USER_DB - end + def tmp_database + @tmp_database ||= prepare_database TMP_USER_DB end + # create the tmp db if it doesn't exist. # requires admin access. def create_tmp_database! @@ -71,12 +63,12 @@ module TemporaryUser end end - # - # this gets called each and every time a User object needs to - # access the database. - # - def db_name - self.class.db_name(self.login) + def database + if login.present? && login.include?(TMP_LOGIN) + self.class.tmp_database + else + self.class.database + end end # returns true if this User instance is stored in tmp db. diff --git a/test/config/gitlab/couchdb.yml b/test/config/gitlab/couchdb.yml new file mode 100644 index 0000000..68761dc --- /dev/null +++ b/test/config/gitlab/couchdb.yml @@ -0,0 +1,3 @@ +test: + auto_update_design_doc: false + host: "couchdb" diff --git a/test/config/couchdb.admin.yml b/test/config/travis/couchdb.admin.yml index 0988bc1..a7677f9 100644 --- a/test/config/couchdb.admin.yml +++ b/test/config/travis/couchdb.admin.yml @@ -2,5 +2,4 @@ test: auto_update_design_doc: false username: "anna" password: "secret" - prefix: "" - + diff --git a/test/config/couchdb.yml b/test/config/travis/couchdb.yml index 9c8b67b..a57b888 100644 --- a/test/config/couchdb.yml +++ b/test/config/travis/couchdb.yml @@ -2,4 +2,3 @@ test: auto_update_design_doc: false username: "me" password: "pwd" - prefix: "" diff --git a/test/travis/ruby-version b/test/config/travis/ruby-version index 68b3a4c..68b3a4c 100644 --- a/test/travis/ruby-version +++ b/test/config/travis/ruby-version diff --git a/test/travis/setup_couch.sh b/test/config/travis/setup_couch.sh index 0502c12..0502c12 100755 --- a/test/travis/setup_couch.sh +++ b/test/config/travis/setup_couch.sh diff --git a/test/unit/temporary_user_test.rb b/test/unit/temporary_user_test.rb index 38ccd67..2c9e70f 100644 --- a/test/unit/temporary_user_test.rb +++ b/test/unit/temporary_user_test.rb @@ -6,16 +6,37 @@ class TemporaryUserTest < ActiveSupport::TestCase InviteCodeValidator.any_instance.stubs(:validate) end - test "tmp_user saved to tmp_users" do - begin - assert User.ancestors.include?(TemporaryUser) + test "TemporaryUser concern is applied" do + assert User.ancestors.include?(TemporaryUser) + end + + test "temporary user has tmp_users as db" do + tmp_user = User.new :login => 'tmp_user_'+SecureRandom.hex(5).downcase + assert_equal 'leap_web_tmp_users', tmp_user.database.name + end + test "normal user has users as db" do + user = User.new :login => 'a'+SecureRandom.hex(5).downcase + assert_equal 'leap_web_users', user.database.name + end + + test "user saved to users" do + begin assert_difference('User.database.info["doc_count"]') do normal_user = User.create!(:login => 'a'+SecureRandom.hex(5).downcase, :password_verifier => 'ABCDEF0010101', :password_salt => 'ABCDEF') refute normal_user.database.to_s.include?('tmp') end + ensure + begin + normal_user.destroy + rescue + end + end + end + test "tmp_user saved to tmp_users" do + begin assert_difference('User.tmp_database.info["doc_count"]') do tmp_user = User.create!(:login => 'tmp_user_'+SecureRandom.hex(5).downcase, :password_verifier => 'ABCDEF0010101', :password_salt => 'ABCDEF') @@ -23,7 +44,6 @@ class TemporaryUserTest < ActiveSupport::TestCase end ensure begin - normal_user.destroy tmp_user.destroy rescue end |