devise-activegraph 3.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +33 -0
  4. data/.rdebugrc +1 -0
  5. data/.travis.yml +40 -0
  6. data/CHANGELOG.md +42 -0
  7. data/Gemfile +41 -0
  8. data/LICENSE +20 -0
  9. data/README.md +113 -0
  10. data/Rakefile +35 -0
  11. data/Vagrantfile +22 -0
  12. data/devise-activegraph.gemspec +27 -0
  13. data/lib/devise-activegraph.rb +23 -0
  14. data/lib/devise/active_graph/version.rb +5 -0
  15. data/lib/devise/orm/active_graph.rb +6 -0
  16. data/lib/devise/orm/active_graph/counter_increment.rb +15 -0
  17. data/lib/devise/orm/active_graph/hook.rb +15 -0
  18. data/lib/generators/active_graph.rb +4 -0
  19. data/lib/generators/active_graph/devise_generator.rb +92 -0
  20. data/lib/generators/active_graph/templates/migration.rb.erb +10 -0
  21. data/provisioning/roles/common/tasks/main.yml +13 -0
  22. data/provisioning/roles/java/README.md +30 -0
  23. data/provisioning/roles/java/files/.gitkeep +0 -0
  24. data/provisioning/roles/java/files/webupd8.key.asc +13 -0
  25. data/provisioning/roles/java/handlers/.gitkeep +0 -0
  26. data/provisioning/roles/java/tasks/.gitkeep +0 -0
  27. data/provisioning/roles/java/tasks/main.yml +6 -0
  28. data/provisioning/roles/java/tasks/openjdk.yml +6 -0
  29. data/provisioning/roles/java/tasks/oracle.yml +12 -0
  30. data/provisioning/roles/java/tasks/webupd8.yml +13 -0
  31. data/provisioning/roles/java/templates/.gitkeep +0 -0
  32. data/provisioning/roles/java/vars/.gitkeep +0 -0
  33. data/provisioning/roles/java/vars/main.yml +2 -0
  34. data/provisioning/roles/neo4j/files/neo4j-server.properties +20 -0
  35. data/provisioning/roles/neo4j/files/neo4j.conf +6 -0
  36. data/provisioning/roles/neo4j/tasks/main.yml +45 -0
  37. data/provisioning/roles/neo4j/vars/main.yml +1 -0
  38. data/provisioning/vagrant.yml +17 -0
  39. data/test/generators/active_graph/devise_generator_test.rb +25 -0
  40. data/test/orm/active_graph.rb +52 -0
  41. data/test/overrides/authenticatable_test.rb +15 -0
  42. data/test/overrides/confirmable_test.rb +37 -0
  43. data/test/overrides/database_authenticatable_test.rb +20 -0
  44. data/test/overrides/devise_helper_test.rb +12 -0
  45. data/test/overrides/email_changed_test.rb +9 -0
  46. data/test/overrides/integration_test.rb +22 -0
  47. data/test/overrides/mapping_test.rb +11 -0
  48. data/test/overrides/trackable_test.rb +6 -0
  49. data/test/rails_app/app/active_graph/admin.rb +43 -0
  50. data/test/rails_app/app/active_graph/user.rb +57 -0
  51. data/test/rails_app/app/active_graph/user_on_engine.rb +45 -0
  52. data/test/rails_app/app/active_graph/user_on_main_app.rb +46 -0
  53. data/test/rails_app/app/active_graph/user_without_email.rb +32 -0
  54. data/test/rails_app/config/application.rb +32 -0
  55. data/test/rails_app/config/environment.rb +5 -0
  56. data/test/test_helper.rb +42 -0
  57. metadata +215 -0
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+ require 'integration/authenticatable_test'
3
+
4
+ class AuthenticationOthersTest < Devise::IntegrationTest
5
+ undef :test_sign_in_stub_in_xml_format
6
+ test 'sign in stub in xml format' do
7
+ get new_user_session_path(:format => 'xml')
8
+ assert_match '<?xml version="1.0" encoding="UTF-8"?>', response.body
9
+ assert_match /<user>.*<\/user>/m, response.body
10
+ assert_match '<email></email>', response.body
11
+ # slight/lame format different in XML.
12
+ #assert_match '<password nil="true"/></password>', response.body
13
+ assert_match '<password nil="true"/>', response.body
14
+ end
15
+ end
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+ require 'models/confirmable_test'
3
+
4
+ class ConfirmableTest < ActiveSupport::TestCase
5
+ def teardown
6
+ Timecop.return
7
+ end
8
+
9
+ # User#confirmation_sent_at is of DateTime type, user.confirmation_sent_at = Time.zone.today gives error.
10
+ undef :test_should_be_active_when_we_set_allow_unconfirmed_access_for_to_nil
11
+ test 'should be active when we set allow_unconfirmed_access_for to nil' do
12
+ swap Devise, allow_unconfirmed_access_for: nil do
13
+ user = create_user
14
+ user.confirmation_sent_at = Time.now
15
+ assert user.active_for_authentication?
16
+ end
17
+ end
18
+
19
+ undef :test_should_not_be_active_when_confirm_in_is_zero
20
+ test 'should not be active when confirm in is zero' do
21
+ Devise.allow_unconfirmed_access_for = 0.days
22
+ user = create_user
23
+ user.confirmation_sent_at = Time.now
24
+ refute user.active_for_authentication?
25
+ end
26
+
27
+ undef :test_should_not_be_active_when_confirm_period_is_set_to_0_days
28
+ test 'should not be active when confirm period is set to 0 days' do
29
+ Devise.allow_unconfirmed_access_for = 0.days
30
+ user = create_user
31
+
32
+ Timecop.freeze(Time.zone.today) do
33
+ user.confirmation_sent_at = Time.now
34
+ refute user.active_for_authentication?
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+ require 'digest/sha1'
3
+ require 'models/database_authenticatable_test'
4
+
5
+ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
6
+ undef :test_should_run_validations_even_when_current_password_is_invalid_or_blank
7
+ # looks like neo4j wants to run the password validation first
8
+ test 'should run validations even when current password is invalid or blank' do
9
+ user = UserWithValidation.create!(valid_attributes)
10
+ user.save
11
+ assert user.persisted?
12
+ assert_not user.update_with_password(:username => "")
13
+ assert_match "usertest", user.reload.username
14
+ assert_match "can't be blank", user.errors[:current_password].join
15
+ end
16
+
17
+ # the passowrd_changed? method returns false with activegraph on user.update(password: 'newpass', password_confirmation: 'newpass')
18
+ undef :test_should_notify_email_on_password_change_when_configured
19
+ undef :test_should_notify_previous_email_on_email_change_when_configured
20
+ end
@@ -0,0 +1,12 @@
1
+ require 'test_helper'
2
+ require 'helpers/devise_helper_test'
3
+ class DeviseHelperTest < Devise::IntegrationTest
4
+ setup :neo4j_i18n
5
+
6
+ private
7
+ def neo4j_i18n
8
+ I18n.backend.store_translations :en, {
9
+ :neo4j => { :models => { :user => "the user" } }
10
+ }
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'mailers/email_changed_test'
3
+
4
+ class EmailChangedTest < ActionMailer::TestCase
5
+ # the email_changed? method returns false with activegraph on u.update!(email: 'new-email@example.com')
6
+ undef :test_set_up_subject_from_I18n
7
+ undef :test_body_should_have_user_info
8
+ undef :test_subject_namespaced_by_model
9
+ end
@@ -0,0 +1,22 @@
1
+ require 'action_dispatch/testing/integration'
2
+
3
+ module IntegrationTestOveride
4
+
5
+ def create_user(options={})
6
+ @user ||= begin
7
+ user = User.create!(
8
+ username: 'usertest',
9
+ email: options[:email] || 'user@test.com',
10
+ password: options[:password] || '12345678',
11
+ password_confirmation: options[:password] || '12345678',
12
+ created_at: Time.now.utc
13
+ )
14
+ user.update_attribute(:confirmation_sent_at, options[:confirmation_sent_at]) if options[:confirmation_sent_at]
15
+ user.confirm unless options[:confirm] == false
16
+ user.lock_access! if options[:locked] == true
17
+ user
18
+ end
19
+ end
20
+ end
21
+
22
+ ActionDispatch::IntegrationTest.prepend IntegrationTestOveride
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+ require 'mapping_test'
3
+
4
+ class MappingTest < ActiveSupport::TestCase
5
+ undef :test_find_scope_works_with_single_table_inheritance
6
+
7
+ test 'find scope works with single table inheritance' do
8
+ assert_equal :user, Devise::Mapping.find_scope!(Class.new(User))
9
+ end
10
+
11
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+ require 'models/trackable_test'
3
+
4
+ class TrackableTest < ActiveSupport::TestCase
5
+ undef :"test_update_tracked_fields!_should_not_persist_invalid_records"
6
+ end
@@ -0,0 +1,43 @@
1
+ require 'shared_admin'
2
+
3
+ class Admin
4
+ include ActiveGraph::Node
5
+ include SharedAdmin
6
+
7
+ ## Database authenticatable
8
+ property :email, type: String
9
+ property :encrypted_password, type: String
10
+
11
+ ## Recoverable
12
+ property :reset_password_token, type: String
13
+ property :reset_password_sent_at, type: DateTime
14
+
15
+ ## Rememberable
16
+ property :remember_created_at, type: DateTime
17
+
18
+ ## Confirmable
19
+ property :confirmation_token, type: String
20
+ property :confirmed_at, type: DateTime
21
+ property :confirmation_sent_at, type: DateTime
22
+ property :unconfirmed_email, type: String
23
+
24
+ ## Lockable
25
+ property :locked_at, type: DateTime
26
+
27
+ property :active, type: Boolean, default: false
28
+
29
+ property :created_at, type: DateTime
30
+ property :updated_at, type: DateTime
31
+
32
+ # def active?
33
+ # return self.active
34
+ # end
35
+
36
+ def to_xml(*args)
37
+ args = args.try(:first) || {}
38
+ attributes.except('confirmation_token').merge(password: nil).to_xml(args.merge({ root: 'admin' }))
39
+ end
40
+ end
41
+
42
+ AdminAdapter = Admin.to_adapter unless Admin.is_a?(OrmAdapter::Base)
43
+
@@ -0,0 +1,57 @@
1
+ require 'shared_user'
2
+
3
+ class User
4
+ include ActiveGraph::Node
5
+ include SharedUser
6
+
7
+ property :username, type: String
8
+ property :facebook_token, type: String
9
+ # property :id
10
+
11
+ ## Database authenticatable
12
+ property :email, type: String, default: ''
13
+ property :encrypted_password, type: String
14
+
15
+ ## Recoverable
16
+ property :reset_password_token, type: String
17
+ property :reset_password_sent_at, type: DateTime
18
+
19
+ ## Rememberable
20
+ property :remember_created_at, type: DateTime
21
+
22
+ ## Trackable
23
+ property :sign_in_count, type: Integer, default: 0
24
+ property :current_sign_in_at, type: DateTime
25
+ property :last_sign_in_at, type: DateTime
26
+ property :current_sign_in_ip, type: String
27
+ property :last_sign_in_ip, type: String
28
+
29
+ ## Confirmable
30
+ property :confirmation_token, type: String
31
+ property :confirmed_at, type: DateTime
32
+ property :confirmation_sent_at, type: DateTime
33
+ # property :unconfirmed_email, type: String # Only if using reconfirmable
34
+
35
+ ## Lockable
36
+ property :failed_attempts, type: Integer, default: 0
37
+ property :unlock_token, type: String
38
+ property :locked_at, type: DateTime
39
+
40
+ property :created_at, type: DateTime
41
+ property :updated_at, type: DateTime
42
+
43
+ def to_xml(*args)
44
+ args = args.try(:first) || {}
45
+ except = ['confirmation_token']
46
+ except << args[:except].to_s if args[:except]
47
+ except = [args[:force_except].to_s] if args[:force_except]
48
+ attributes.except(*except).merge(password: nil).to_xml(args.merge({ root: 'user' }))
49
+ end
50
+
51
+ def self.validations_performed
52
+ false
53
+ end
54
+ end
55
+
56
+ UserAdapter = User.to_adapter unless User.is_a?(OrmAdapter::Base)
57
+
@@ -0,0 +1,45 @@
1
+ require 'shared_user_without_omniauth'
2
+
3
+ class UserOnEngine
4
+ include ActiveGraph::Node
5
+ include SharedUserWithoutOmniauth
6
+
7
+ property :username, type: String
8
+ property :facebook_token, type: String
9
+
10
+ ## Database authenticatable
11
+ property :email, type: String, default: ''
12
+ property :encrypted_password, type: String, default: ''
13
+
14
+ ## Recoverable
15
+ property :reset_password_token, type: String
16
+ property :reset_password_sent_at, type: DateTime
17
+
18
+ ## Rememberable
19
+ property :remember_created_at, type: DateTime
20
+
21
+ ## Trackable
22
+ property :sign_in_count, type: Integer, default: 0
23
+ property :current_sign_in_at, type: DateTime
24
+ property :last_sign_in_at, type: DateTime
25
+ property :current_sign_in_ip, type: String
26
+ property :last_sign_in_ip, type: String
27
+
28
+ ## Confirmable
29
+ property :confirmation_token, type: String
30
+ property :confirmed_at, type: DateTime
31
+ property :confirmation_sent_at, type: DateTime
32
+ # property :unconfirmed_email, type: String # Only if using reconfirmable
33
+
34
+ ## Lockable
35
+ property :failed_attempts, type: Integer, default: 0
36
+ property :unlock_token, type: String
37
+ property :locked_at, type: DateTime
38
+
39
+ property :created_at, type: DateTime
40
+ property :updated_at, type: DateTime
41
+
42
+ def raw_confirmation_token
43
+ @raw_confirmation_token
44
+ end
45
+ end
@@ -0,0 +1,46 @@
1
+ require 'shared_user_without_omniauth'
2
+
3
+ class UserOnMainApp
4
+ include ActiveGraph::Node
5
+ include SharedUserWithoutOmniauth
6
+
7
+ property :username, type: String
8
+ property :facebook_token, type: String
9
+
10
+ ## Database authenticatable
11
+ property :email, type: String, default: ''
12
+ property :encrypted_password, type: String, default: ''
13
+
14
+ ## Recoverable
15
+ property :reset_password_token, type: String
16
+ property :reset_password_sent_at, type: DateTime
17
+
18
+ ## Rememberable
19
+ property :remember_created_at, type: DateTime
20
+
21
+ ## Trackable
22
+ property :sign_in_count, type: Integer, default: 0
23
+ property :current_sign_in_at, type: DateTime
24
+ property :last_sign_in_at, type: DateTime
25
+ property :current_sign_in_ip, type: String
26
+ property :last_sign_in_ip, type: String
27
+
28
+ ## Confirmable
29
+ property :confirmation_token, type: String
30
+ property :confirmed_at, type: DateTime
31
+ property :confirmation_sent_at, type: DateTime
32
+ # property :unconfirmed_email, type: String # Only if using reconfirmable
33
+
34
+ ## Lockable
35
+ property :failed_attempts, type: Integer, default: 0
36
+ property :unlock_token, type: String
37
+ property :locked_at, type: DateTime
38
+
39
+ property :created_at, type: DateTime
40
+ property :updated_at, type: DateTime
41
+
42
+ def raw_confirmation_token
43
+ @raw_confirmation_token
44
+ end
45
+
46
+ end
@@ -0,0 +1,32 @@
1
+ require "shared_user_without_email"
2
+
3
+ class UserWithoutEmail
4
+ include ActiveGraph::Node
5
+ include SharedUserWithoutEmail
6
+
7
+ property :username, type: String
8
+ property :facebook_token, type: String
9
+
10
+ ## Database authenticatable
11
+ property :email, type: String, default: ''
12
+ property :encrypted_password, type: String, default: ''
13
+
14
+ ## Recoverable
15
+ property :reset_password_token, type: String
16
+ property :reset_password_sent_at, type: DateTime
17
+
18
+ ## Rememberable
19
+ property :remember_created_at, type: DateTime
20
+
21
+ ## Trackable
22
+ property :sign_in_count, type: Integer, default: 0
23
+ property :current_sign_in_at, type: DateTime
24
+ property :last_sign_in_at, type: DateTime
25
+ property :current_sign_in_ip, type: String
26
+ property :last_sign_in_ip, type: String
27
+
28
+ ## Lockable
29
+ property :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
30
+ property :unlock_token, type: String # Only if unlock strategy is :email or :both
31
+ property :locked_at, type: DateTime
32
+ end
@@ -0,0 +1,32 @@
1
+ APP_ROOT = File.expand_path("#{DEVISE_PATH}/test/rails_app")
2
+ require "#{APP_ROOT}/config/boot"
3
+
4
+ require "action_controller/railtie"
5
+ require "action_mailer/railtie"
6
+ require "rails/test_unit/railtie"
7
+
8
+ Bundler.require :default, DEVISE_ORM
9
+
10
+ begin
11
+ require "#{DEVISE_ORM}/railtie"
12
+ rescue LoadError
13
+ end
14
+
15
+ require "devise"
16
+
17
+
18
+ require "tmpdir"
19
+
20
+ module RailsApp
21
+ class Application < Rails::Application
22
+ # Add additional load paths for your own custom dirs
23
+ config.root = APP_ROOT
24
+ config.autoload_paths.reject!{ |p| p =~ /\/app\/(\w+)$/ && !%w(controllers helpers views).include?($1) }
25
+ config.autoload_paths += [ File.expand_path("#{File.dirname(__FILE__)}/../app/#{DEVISE_ORM}") ]
26
+
27
+ # Configure sensitive parameters which will be filtered from the log file.
28
+ config.filter_parameters << :password
29
+
30
+ config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ # Load the rails application
2
+ require File.expand_path('../application', __FILE__)
3
+
4
+ # Initialize the rails application
5
+ RailsApp::Application.initialize!
@@ -0,0 +1,42 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ DEVISE_ORM = (ENV["DEVISE_ORM"] || :neo4).to_sym
3
+ DEVISE_PATH = ENV['DEVISE_PATH']
4
+
5
+ $:.unshift File.dirname(__FILE__)
6
+
7
+ puts "\n==> Devise.orm = #{DEVISE_ORM.inspect}"
8
+
9
+ require "rails_app/config/environment"
10
+ require "rails/test_help"
11
+ require "orm/#{DEVISE_ORM}"
12
+ require 'pry'
13
+
14
+ I18n.load_path << "#{DEVISE_PATH}/test/support/locale/en.yml"
15
+
16
+ require 'mocha/setup'
17
+ require 'timecop'
18
+ require 'webrat'
19
+ Webrat.configure do |config|
20
+ config.mode = :rails
21
+ config.open_error_files = false
22
+ end
23
+
24
+ Mocha::Configuration.allow(:stubbing_method_on_nil)
25
+
26
+ # Add support to load paths so we can overwrite broken webrat setup
27
+ $:.unshift "#{DEVISE_PATH}/test/support"
28
+ Dir["#{DEVISE_PATH}/test/support/**/*.rb"].each { |f| require f }
29
+
30
+ # Devise-neo4j test support
31
+ $:.unshift "#{File.dirname(__FILE__)}/support"
32
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
33
+
34
+ # For generators
35
+ require 'rails/generators/test_case'
36
+ require 'generators/devise/install_generator'
37
+ require 'generators/devise/controllers_generator'
38
+ require 'generators/devise/views_generator'
39
+ require 'test_models'
40
+ require 'overrides/integration_test'
41
+ require 'rails-controller-testing'
42
+ Rails::Controller::Testing.install