fat_free_crm 0.15.0.beta → 0.15.0.beta.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fat_free_crm might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +517 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +145 -9
- data/Gemfile +11 -13
- data/Gemfile.lock +104 -92
- data/README.md +2 -9
- data/app/assets/javascripts/application.js.erb +1 -1
- data/app/assets/javascripts/crm_select2.js.coffee +0 -1
- data/app/controllers/application_controller.rb +6 -6
- data/app/controllers/comments_controller.rb +7 -5
- data/app/controllers/entities/contacts_controller.rb +4 -4
- data/app/controllers/entities/opportunities_controller.rb +3 -3
- data/app/controllers/entities_controller.rb +3 -2
- data/app/controllers/home_controller.rb +21 -14
- data/app/controllers/passwords_controller.rb +1 -1
- data/app/controllers/users_controller.rb +3 -3
- data/app/helpers/accounts_helper.rb +2 -2
- data/app/helpers/application_helper.rb +20 -19
- data/app/helpers/campaigns_helper.rb +1 -1
- data/app/helpers/opportunities_helper.rb +4 -3
- data/app/helpers/tasks_helper.rb +6 -4
- data/app/helpers/users_helper.rb +1 -1
- data/app/helpers/versions_helper.rb +1 -1
- data/app/inputs/date_pair_input.rb +1 -1
- data/app/inputs/date_time_input.rb +1 -1
- data/app/models/entities/contact.rb +1 -0
- data/app/models/entities/lead.rb +4 -9
- data/app/models/entities/opportunity.rb +3 -6
- data/app/models/fields/field.rb +2 -3
- data/app/models/polymorphic/address.rb +1 -1
- data/app/models/polymorphic/comment.rb +1 -1
- data/app/models/polymorphic/task.rb +2 -3
- data/app/models/polymorphic/version.rb +5 -5
- data/app/models/setting.rb +6 -7
- data/app/models/users/user.rb +2 -2
- data/app/views/shared/_tags.html.haml +1 -5
- data/config/environments/test.rb +1 -1
- data/config/initializers/assets.rb +1 -1
- data/config/initializers/paper_trail.rb +1 -1
- data/config/initializers/simple_form.rb +1 -1
- data/config/initializers/views.rb +0 -1
- data/config/locales/th.rb +4 -4
- data/config/unicorn.rb +2 -2
- data/db/migrate/20100928030620_remove_uuid.rb +2 -4
- data/db/migrate/20111201030535_add_field_groups_klass_name.rb +2 -1
- data/db/migrate/20120224073107_remove_default_value_and_clear_settings.rb +1 -1
- data/db/schema.rb +0 -2
- data/fat_free_crm.gemspec +5 -5
- data/lib/fat_free_crm.rb +1 -3
- data/lib/fat_free_crm/callback.rb +2 -1
- data/lib/fat_free_crm/core_ext/string.rb +2 -2
- data/lib/fat_free_crm/engine.rb +1 -1
- data/lib/fat_free_crm/fields.rb +1 -1
- data/lib/fat_free_crm/i18n.rb +1 -1
- data/lib/fat_free_crm/mail_processor/base.rb +8 -2
- data/lib/fat_free_crm/mail_processor/comment_replies.rb +2 -1
- data/lib/fat_free_crm/permissions.rb +1 -1
- data/lib/fat_free_crm/version.rb +1 -1
- data/lib/gravatar_image_tag.rb +2 -2
- data/lib/tasks/ffcrm/comment_replies.rake +2 -2
- data/lib/tasks/ffcrm/config.rake +7 -6
- data/lib/tasks/ffcrm/demo.rake +1 -1
- data/lib/tasks/ffcrm/dropbox.rake +2 -2
- data/lib/tasks/ffcrm/setup.rake +4 -2
- data/lib/tasks/ffcrm/update_data.rake +5 -7
- data/spec/controllers/entities/campaigns_controller_spec.rb +1 -1
- data/spec/controllers/entities/leads_controller_spec.rb +1 -1
- data/spec/controllers/home_controller_spec.rb +5 -5
- data/spec/controllers/tasks_controller_spec.rb +3 -2
- data/spec/factories/sequences.rb +1 -2
- data/spec/factories/shared_factories.rb +5 -5
- data/spec/factories/user_factories.rb +3 -3
- data/spec/models/entities/opportunity_spec.rb +1 -1
- data/spec/models/fields/custom_field_pair_spec.rb +2 -2
- data/spec/models/setting_spec.rb +1 -1
- data/spec/shared/controllers.rb +1 -1
- data/spec/support/auth_macros.rb +6 -5
- data/spec/support/macros.rb +1 -1
- data/spec/views/application/auto_complete.haml_spec.rb +3 -3
- data/spec/views/campaigns/show.haml_spec.rb +2 -2
- data/spec/views/leads/update.js.haml_spec.rb +1 -1
- data/spec/views/tasks/index.haml_spec.rb +1 -1
- data/spec/views/tasks/update.js.haml_spec.rb +7 -7
- metadata +29 -4
@@ -43,6 +43,7 @@ module FatFreeCRM
|
|
43
43
|
def self.view_responder(method)
|
44
44
|
@@responder[method] ||= @@classes.map(&:instance).select { |instance| instance.class.view_hooks[method] }
|
45
45
|
end
|
46
|
+
|
46
47
|
# Invokes the view hook Proc stored under :hook and captures its output.
|
47
48
|
# => Instead of defining methods on the class, view hooks are
|
48
49
|
# stored as Procs in a hash. This allows the same hook to be manipulated in
|
@@ -52,7 +53,7 @@ module FatFreeCRM
|
|
52
53
|
# - a hash of arrays containing Procs and positions to insert content.
|
53
54
|
#--------------------------------------------------------------------------
|
54
55
|
def self.view_hook(hook, caller, context = {})
|
55
|
-
view_responder(hook).
|
56
|
+
view_responder(hook).each_with_object(Hash.new([])) do |instance, response|
|
56
57
|
# Process each operation within each view hook, storing the data in a hash.
|
57
58
|
instance.class.view_hooks[hook].each do |op|
|
58
59
|
response[op[:position]] += [op[:proc].call(caller, context)]
|
@@ -34,10 +34,10 @@ class String
|
|
34
34
|
# A query with 4 words will generate 6 permutations
|
35
35
|
def name_permutations
|
36
36
|
parts = split(" ")
|
37
|
-
(parts.size - 1)
|
37
|
+
Array.new((parts.size - 1)) do |i|
|
38
38
|
# ["A", "B", "C", "D"] => [["A B C", "D"], ["A B", "C D"], ["A", "B C D"]]
|
39
39
|
[parts[(0..i)].join(" "), parts[(i + 1)..-1].join(" ")]
|
40
|
-
end.
|
40
|
+
end.each_with_object([]) do |perm, arr|
|
41
41
|
# Search both [first, last] and [last, first]
|
42
42
|
# e.g. for every ["A B C", "D"], also include ["D", "A B C"]
|
43
43
|
arr << perm
|
data/lib/fat_free_crm/engine.rb
CHANGED
@@ -11,7 +11,7 @@ module FatFreeCRM
|
|
11
11
|
config.active_record.observers = [:lead_observer, :opportunity_observer,
|
12
12
|
:task_observer, :entity_observer]
|
13
13
|
|
14
|
-
initializer "model_core.factories", :
|
14
|
+
initializer "model_core.factories", after: "factory_girl.set_factory_paths" do
|
15
15
|
FactoryGirl.definition_file_paths << File.expand_path('../../../spec/factories', __FILE__) if defined?(FactoryGirl)
|
16
16
|
end
|
17
17
|
|
data/lib/fat_free_crm/fields.rb
CHANGED
@@ -79,7 +79,7 @@ module FatFreeCRM
|
|
79
79
|
# Refresh columns and try again.
|
80
80
|
self.class.reset_column_information
|
81
81
|
# If new record, create new object from class, else reload class
|
82
|
-
object =
|
82
|
+
object = new_record? ? self.class.new : (reload && self)
|
83
83
|
# ensure serialization is setup if needed
|
84
84
|
self.class.serialize_custom_fields!
|
85
85
|
# Try again if object now responds to method, else return nil
|
data/lib/fat_free_crm/i18n.rb
CHANGED
@@ -13,7 +13,7 @@ module FatFreeCRM
|
|
13
13
|
super(args.first, default: args.first.to_s)
|
14
14
|
elsif args.second.is_a?(Hash)
|
15
15
|
super(*args)
|
16
|
-
elsif args.second.is_a?(
|
16
|
+
elsif args.second.is_a?(Integer)
|
17
17
|
super(args.first, count: args.second)
|
18
18
|
else
|
19
19
|
super(args.first, value: args.second)
|
@@ -16,7 +16,9 @@ module FatFreeCRM
|
|
16
16
|
|
17
17
|
#--------------------------------------------------------------------------------------
|
18
18
|
def initialize
|
19
|
-
@archived
|
19
|
+
@archived = 0
|
20
|
+
@discarded = 0
|
21
|
+
@dry_run = false
|
20
22
|
end
|
21
23
|
|
22
24
|
# Setup imap folders in settings.
|
@@ -81,7 +83,11 @@ module FatFreeCRM
|
|
81
83
|
if @imap
|
82
84
|
@imap.logout
|
83
85
|
unless @imap.disconnected?
|
84
|
-
|
86
|
+
begin
|
87
|
+
@imap.disconnect
|
88
|
+
rescue
|
89
|
+
nil
|
90
|
+
end
|
85
91
|
end
|
86
92
|
end
|
87
93
|
end
|
@@ -39,7 +39,8 @@ module FatFreeCRM
|
|
39
39
|
#--------------------------------------------------------------------------------------
|
40
40
|
def with_subject_line(email)
|
41
41
|
if /\[([^:]*):([^\]]*)\]/ =~ email.subject
|
42
|
-
entity_name
|
42
|
+
entity_name = Regexp.last_match[1]
|
43
|
+
entity_id = Regexp.last_match[2]
|
43
44
|
# Check that entity is a known model
|
44
45
|
if ENTITY_SHORTCUTS.values.include?(entity_name)
|
45
46
|
yield entity_name, entity_id
|
@@ -74,7 +74,7 @@ module FatFreeCRM
|
|
74
74
|
permissions_to_remove = []
|
75
75
|
end
|
76
76
|
|
77
|
-
permissions_to_remove.each { |p|
|
77
|
+
permissions_to_remove.each { |p| permissions.delete(p); p.destroy }
|
78
78
|
end
|
79
79
|
|
80
80
|
# Save the model along with its permissions if any.
|
data/lib/fat_free_crm/version.rb
CHANGED
data/lib/gravatar_image_tag.rb
CHANGED
@@ -46,11 +46,11 @@ module GravatarImageTag
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def self.gravatar_id(email, filetype = nil)
|
49
|
-
"#{
|
49
|
+
"#{Digest::MD5.hexdigest(email)}#{".#{filetype}" unless filetype.nil?}" unless email.nil?
|
50
50
|
end
|
51
51
|
|
52
52
|
def self.url_params(gravatar_params)
|
53
|
-
return nil if gravatar_params.keys.
|
53
|
+
return nil if gravatar_params.keys.empty?
|
54
54
|
"?#{gravatar_params.map { |key, value| "#{key}=#{URI.escape(value.is_a?(String) ? value : value.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))}" }.join('&')}"
|
55
55
|
end
|
56
56
|
end
|
@@ -8,13 +8,13 @@ namespace :ffcrm do
|
|
8
8
|
desc "Run comment inbox crawler and process incoming emails"
|
9
9
|
task run: :environment do
|
10
10
|
require "fat_free_crm/mail_processor/comment_replies"
|
11
|
-
FatFreeCRM::MailProcessor::CommentReplies.new.run(
|
11
|
+
FatFreeCRM::MailProcessor::CommentReplies.new.run(false)
|
12
12
|
end
|
13
13
|
namespace :run do
|
14
14
|
desc "[Dry run] - Run comment inbox crawler and process incoming emails"
|
15
15
|
task dry: :environment do
|
16
16
|
require "fat_free_crm/mail_processor/comment_replies"
|
17
|
-
FatFreeCRM::MailProcessor::CommentReplies.new.run(
|
17
|
+
FatFreeCRM::MailProcessor::CommentReplies.new.run(true)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
data/lib/tasks/ffcrm/config.rake
CHANGED
@@ -9,7 +9,8 @@ namespace :ffcrm do
|
|
9
9
|
task :copy_database_yml do
|
10
10
|
require 'fileutils'
|
11
11
|
filename = "config/database.#{ENV['DB'] || 'postgres'}.yml"
|
12
|
-
orig
|
12
|
+
orig = FatFreeCRM.root.join(filename)
|
13
|
+
dest = Rails.root.join('config/database.yml')
|
13
14
|
unless File.exist?(dest)
|
14
15
|
puts "Copying #{filename} to config/database.yml ..."
|
15
16
|
FileUtils.cp orig, dest
|
@@ -27,13 +28,13 @@ namespace :ffcrm do
|
|
27
28
|
require 'fileutils'
|
28
29
|
require 'syck'
|
29
30
|
require 'psych'
|
30
|
-
Dir[File.join(Rails.root, 'config', '**', '*.yml')].each do |
|
31
|
+
Dir[File.join(Rails.root, 'config', '**', '*.yml')].each do |file_path|
|
31
32
|
YAML::ENGINE.yamler = 'syck'
|
32
|
-
puts "Converting #{
|
33
|
-
yml = YAML.load(File.read(
|
34
|
-
FileUtils.cp
|
33
|
+
puts "Converting #{file_path}"
|
34
|
+
yml = YAML.load(File.read(file_path))
|
35
|
+
FileUtils.cp file_path, "#{file_path}.bak"
|
35
36
|
YAML::ENGINE.yamler = 'psych'
|
36
|
-
File.open(
|
37
|
+
File.open(file_path, 'w') { |file| file.write(YAML.dump(yml)) }
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
data/lib/tasks/ffcrm/demo.rake
CHANGED
@@ -46,7 +46,7 @@ namespace :ffcrm do
|
|
46
46
|
|
47
47
|
if [Account, Campaign, Contact, Lead, Opportunity].include?(item.class)
|
48
48
|
viewed_at = created_at + rand(12 * 60).minutes
|
49
|
-
|
49
|
+
create_version(event: "view", created_at: viewed_at, user: user, item: item)
|
50
50
|
end
|
51
51
|
print "." if item.id % 10 == 0
|
52
52
|
end
|
@@ -8,14 +8,14 @@ namespace :ffcrm do
|
|
8
8
|
desc "Run dropbox crawler and process incoming emails"
|
9
9
|
task run: :environment do
|
10
10
|
require "fat_free_crm/mail_processor/dropbox"
|
11
|
-
FatFreeCRM::MailProcessor::Dropbox.new.run(
|
11
|
+
FatFreeCRM::MailProcessor::Dropbox.new.run(false)
|
12
12
|
end
|
13
13
|
|
14
14
|
namespace :run do
|
15
15
|
desc "[Dry run] - Run dropbox crawler and process incoming emails"
|
16
16
|
task dry: :environment do
|
17
17
|
require "fat_free_crm/mail_processor/dropbox"
|
18
|
-
FatFreeCRM::MailProcessor::Dropbox.new.run(
|
18
|
+
FatFreeCRM::MailProcessor::Dropbox.new.run(true)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
data/lib/tasks/ffcrm/setup.rake
CHANGED
@@ -28,7 +28,9 @@ namespace :ffcrm do
|
|
28
28
|
namespace :setup do
|
29
29
|
desc "Create admin user"
|
30
30
|
task admin: :environment do
|
31
|
-
username
|
31
|
+
username = ENV["USERNAME"]
|
32
|
+
password = ENV["PASSWORD"]
|
33
|
+
email = ENV["EMAIL"]
|
32
34
|
unless username && password && email
|
33
35
|
puts "\nTo create the admin user you will be prompted to enter username, password,"
|
34
36
|
puts "and email address. You might also specify the username of existing user.\n"
|
@@ -40,7 +42,7 @@ namespace :ffcrm do
|
|
40
42
|
|
41
43
|
password ||= "manager"
|
42
44
|
print "Password [#{password}]: "
|
43
|
-
echo =
|
45
|
+
echo = ->(toggle) { return if RUBY_PLATFORM =~ /mswin/; system(toggle ? "stty echo && echo" : "stty -echo") }
|
44
46
|
begin
|
45
47
|
echo.call(false)
|
46
48
|
reply = STDIN.gets.strip
|
@@ -210,16 +210,14 @@ in a console and continue. This is strongly discouraged. You have been warned!
|
|
210
210
|
# SELECT "addresses".* FROM "addresses"
|
211
211
|
# WHERE (("addresses"."country" = 'AU' OR "addresses"."country" = 'Australia'))
|
212
212
|
convert_table.each do |ct|
|
213
|
-
|
214
|
-
scope =
|
215
|
-
scope = scope.or(
|
213
|
+
table = Address.arel_table
|
214
|
+
scope = table[:country].eq(ct[0]) # Australia
|
215
|
+
scope = scope.or(table[:country].eq(ct[1])) # AU
|
216
216
|
|
217
217
|
tmp = Address.where(scope)
|
218
218
|
tmp.map { |t| t.country = ct[2] }
|
219
219
|
|
220
|
-
unless tmp.blank?
|
221
|
-
addresses_to_update << tmp
|
222
|
-
end
|
220
|
+
addresses_to_update << tmp unless tmp.blank?
|
223
221
|
end
|
224
222
|
|
225
223
|
Address.transaction do
|
@@ -229,8 +227,8 @@ in a console and continue. This is strongly discouraged. You have been warned!
|
|
229
227
|
end
|
230
228
|
Setting.have_run_country_migration = true
|
231
229
|
rescue Exception => e
|
232
|
-
ActiveRecord::Rollback
|
233
230
|
puts e
|
231
|
+
raise ActiveRecord::Rollback
|
234
232
|
end
|
235
233
|
end
|
236
234
|
end
|
@@ -373,7 +373,7 @@ describe CampaignsController do
|
|
373
373
|
|
374
374
|
xhr :put, :update, id: 42, campaign: { name: "Hello", access: "Shared", user_ids: %w(7 8) }
|
375
375
|
expect(assigns[:campaign].access).to eq("Shared")
|
376
|
-
expect(assigns[:campaign].user_ids.sort).to eq([
|
376
|
+
expect(assigns[:campaign].user_ids.sort).to eq([he.id, she.id])
|
377
377
|
end
|
378
378
|
|
379
379
|
describe "campaign got deleted or otherwise unavailable" do
|
@@ -467,7 +467,7 @@ describe LeadsController do
|
|
467
467
|
she = FactoryGirl.create(:user, id: 8)
|
468
468
|
|
469
469
|
xhr :put, :update, id: @lead.id, lead: { access: "Shared", user_ids: %w(7 8) }
|
470
|
-
expect(@lead.user_ids.sort).to eq([
|
470
|
+
expect(@lead.user_ids.sort).to eq([he.id, she.id])
|
471
471
|
end
|
472
472
|
|
473
473
|
it "should get the data for leads sidebar when called from leads index" do
|
@@ -21,7 +21,7 @@ describe HomeController do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should not include views in the list of activities" do
|
24
|
-
|
24
|
+
FactoryGirl.create(:version, item: FactoryGirl.create(:account, user: @current_user), event: "view")
|
25
25
|
expect(controller).to receive(:get_activities).once.and_return([])
|
26
26
|
|
27
27
|
get :index
|
@@ -42,11 +42,12 @@ describe HomeController do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should not display completed tasks" do
|
45
|
-
|
46
|
-
|
45
|
+
my_task = FactoryGirl.create(:task, user_id: current_user.id, name: "Your first task", bucket: "due_asap", assigned_to: current_user.id)
|
46
|
+
FactoryGirl.create(:task, user_id: current_user.id, name: "Completed task", bucket: "due_asap", completed_at: 1.days.ago, completed_by: current_user.id, assigned_to: current_user.id)
|
47
47
|
|
48
48
|
get :index
|
49
|
-
|
49
|
+
|
50
|
+
expect(assigns[:my_tasks]).to eq([my_task])
|
50
51
|
end
|
51
52
|
|
52
53
|
it "should get a list of my opportunities ordered by closes_on" do
|
@@ -202,7 +203,6 @@ describe HomeController do
|
|
202
203
|
end
|
203
204
|
|
204
205
|
it "should not do anything when state neither Expanded nor Collapsed" do
|
205
|
-
comment = double(Comment)
|
206
206
|
expect(Comment).not_to receive(:find).with("1")
|
207
207
|
xhr :get, :timeline, type: "comment", id: "1", state: "Explode"
|
208
208
|
end
|
@@ -14,7 +14,7 @@ describe TasksController do
|
|
14
14
|
def produce_tasks(user, view)
|
15
15
|
settings = (view != "completed" ? Setting.task_bucket : Setting.task_completed)
|
16
16
|
|
17
|
-
settings.
|
17
|
+
settings.each_with_object({}) do |due, hash|
|
18
18
|
hash[due] ||= []
|
19
19
|
if Date.tomorrow == Date.today.end_of_week && due == :due_tomorrow
|
20
20
|
due = :due_this_week
|
@@ -55,7 +55,8 @@ describe TasksController do
|
|
55
55
|
describe "responding to GET index" do
|
56
56
|
before do
|
57
57
|
update_sidebar
|
58
|
-
@timezone
|
58
|
+
@timezone = Time.zone
|
59
|
+
Time.zone = 'UTC'
|
59
60
|
end
|
60
61
|
|
61
62
|
after do
|
data/spec/factories/sequences.rb
CHANGED
@@ -5,8 +5,7 @@
|
|
5
5
|
#------------------------------------------------------------------------------
|
6
6
|
FactoryGirl.define do
|
7
7
|
sequence :address do |_n|
|
8
|
-
FFaker::Address.street_address + " " + FFaker::Address.secondary_address + "\n"
|
9
|
-
FFaker::Address.city + ", " + FFaker::AddressUS.state_abbr + " " + FFaker::AddressUS.zip_code
|
8
|
+
FFaker::Address.street_address + " " + FFaker::Address.secondary_address + "\n" + FFaker::Address.city + ", " + FFaker::AddressUS.state_abbr + " " + FFaker::AddressUS.zip_code
|
10
9
|
end
|
11
10
|
|
12
11
|
sequence :username do |n|
|
@@ -6,14 +6,14 @@
|
|
6
6
|
FactoryGirl.define do
|
7
7
|
factory :version do
|
8
8
|
whodunnit ""
|
9
|
-
item {
|
9
|
+
item { raise "Please specify :item for the version" }
|
10
10
|
event "create"
|
11
11
|
created_at { FactoryGirl.generate(:time) }
|
12
12
|
end
|
13
13
|
|
14
14
|
factory :comment do
|
15
15
|
user
|
16
|
-
commentable {
|
16
|
+
commentable { raise "Please specify :commentable for the comment" }
|
17
17
|
title { FactoryGirl.generate(:title) }
|
18
18
|
private false
|
19
19
|
comment { FFaker::Lorem.paragraph }
|
@@ -25,7 +25,7 @@ FactoryGirl.define do
|
|
25
25
|
factory :email do
|
26
26
|
imap_message_id { "%08x" % rand(0xFFFFFFFF) }
|
27
27
|
user
|
28
|
-
mediator {
|
28
|
+
mediator { raise "Please specify :mediator for the email" }
|
29
29
|
sent_from { FFaker::Internet.email }
|
30
30
|
sent_to { FFaker::Internet.email }
|
31
31
|
cc { FFaker::Internet.email }
|
@@ -42,7 +42,7 @@ FactoryGirl.define do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
factory :address do
|
45
|
-
addressable {
|
45
|
+
addressable { raise "Please specify :addressable for the address" }
|
46
46
|
street1 { FFaker::Address.street_address }
|
47
47
|
street2 { FFaker::Address.street_address }
|
48
48
|
city { FFaker::Address.city }
|
@@ -58,7 +58,7 @@ FactoryGirl.define do
|
|
58
58
|
|
59
59
|
factory :avatar do
|
60
60
|
user
|
61
|
-
entity {
|
61
|
+
entity { raise "Please specify :entity for the avatar" }
|
62
62
|
image { File.new(Rails.root.join('spec', 'fixtures', 'rails.png')) }
|
63
63
|
updated_at { FactoryGirl.generate(:time) }
|
64
64
|
created_at { FactoryGirl.generate(:time) }
|
@@ -43,15 +43,15 @@ FactoryGirl.define do
|
|
43
43
|
|
44
44
|
factory :permission do
|
45
45
|
user
|
46
|
-
asset {
|
46
|
+
asset { raise "Please specify :asset for the permission" }
|
47
47
|
updated_at { FactoryGirl.generate(:time) }
|
48
48
|
created_at { FactoryGirl.generate(:time) }
|
49
49
|
end
|
50
50
|
|
51
51
|
factory :preference do
|
52
52
|
user
|
53
|
-
name {
|
54
|
-
value {
|
53
|
+
name { raise "Please specify :name for the preference" }
|
54
|
+
value { raise "Please specify :value for the preference" }
|
55
55
|
updated_at { FactoryGirl.generate(:time) }
|
56
56
|
created_at { FactoryGirl.generate(:time) }
|
57
57
|
end
|
@@ -35,7 +35,7 @@ describe Opportunity do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should be possible to create opportunity with the same name" do
|
38
|
-
|
38
|
+
FactoryGirl.create(:opportunity, name: "Hello", user: current_user)
|
39
39
|
expect { FactoryGirl.create(:opportunity, name: "Hello", user: current_user) }.to_not raise_error
|
40
40
|
end
|
41
41
|
|
@@ -18,7 +18,7 @@ describe CustomFieldPair do
|
|
18
18
|
@field = { 'as' => 'foopair', 'field_group_id' => 1, 'label' => 'Event' }
|
19
19
|
@pair1 = { 'name' => 'pair1' }
|
20
20
|
@pair2 = { 'name' => 'pair2' }
|
21
|
-
@params
|
21
|
+
@params = { 'field' => @field, 'pair' => { '0' => @pair1, '1' => @pair2 } }
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should create the pair" do
|
@@ -38,7 +38,7 @@ describe CustomFieldPair do
|
|
38
38
|
@field = { 'as' => 'foopair', 'field_group_id' => 1, 'label' => 'Event' }
|
39
39
|
@pair1 = { 'name' => 'pair1' }
|
40
40
|
@pair2 = { 'name' => 'pair2' }
|
41
|
-
@params
|
41
|
+
@params = { 'id' => '3', 'field' => @field, 'pair' => { '0' => @pair1, '1' => @pair2 } }
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should update the pair" do
|
data/spec/models/setting_spec.rb
CHANGED
@@ -31,7 +31,7 @@ describe Setting do
|
|
31
31
|
|
32
32
|
it "should use value from YAML if setting is missing from database" do
|
33
33
|
@setting = FactoryGirl.create(:setting, name: "magoody", value: nil)
|
34
|
-
Setting.yaml_settings
|
34
|
+
Setting.yaml_settings[:magoody] = "thingymabob"
|
35
35
|
expect(Setting[:magoody]).to eq("thingymabob")
|
36
36
|
expect(Setting.magoody).to eq("thingymabob")
|
37
37
|
end
|