rubocop fixes

This commit is contained in:
Brenda
2019-12-16 21:41:47 +13:00
parent b287a4eb58
commit 2826c2ec20
87 changed files with 606 additions and 524 deletions

View File

@@ -15,6 +15,43 @@ Lint/SuppressedException:
Exclude:
- 'lib/tasks/testing.rake'
Lint/UselessAssignment:
Exclude:
- 'config.rb'
- 'config/compass.rb'
Metrics/AbcSize:
Max: 125
# Configuration parameters: CountComments, ExcludedMethods.
# ExcludedMethods: refine
Metrics/BlockLength:
Max: 59
# Configuration parameters: CountComments.
Metrics/ClassLength:
Max: 186
Metrics/CyclomaticComplexity:
Max: 29
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# URISchemes: http, https
Metrics/LineLength:
Max: 341
# Configuration parameters: CountComments, ExcludedMethods.
Metrics/MethodLength:
Max: 106
# Configuration parameters: CountComments.
Metrics/ModuleLength:
Max: 107
Metrics/PerceivedComplexity:
Max: 29
# Configuration parameters: EnforcedStyle.
# SupportedStyles: lowercase, uppercase
Naming/HeredocDelimiterCase:
@@ -35,11 +72,27 @@ Rails/CreateTableWithTimestamps:
- 'db/migrate/20161201154922_add_photos_seeds_table.rb'
- 'db/migrate/20171022032108_all_the_predictions.rb'
# Configuration parameters: EnforcedStyle.
# SupportedStyles: strict, flexible
Rails/Date:
Exclude:
- 'app/mailers/notifier.rb'
# Configuration parameters: EnforcedStyle.
# SupportedStyles: slashes, arguments
Rails/FilePath:
Exclude:
- 'app/controllers/crops_controller.rb'
- 'config/application.rb'
- 'config/environments/development.rb'
- 'db/seeds.rb'
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/HasAndBelongsToMany:
Exclude:
- 'app/models/member.rb'
- 'app/models/role.rb'
# Configuration parameters: Include.
# Include: app/models/**/*.rb
@@ -47,6 +100,44 @@ Rails/HasManyOrHasOneDependent:
Exclude:
- 'app/models/member.rb'
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/InverseOf:
Exclude:
- 'app/models/concerns/ownable.rb'
Rails/OutputSafety:
Exclude:
- 'app/helpers/auto_suggest_helper.rb'
- 'app/helpers/gardens_helper.rb'
# Configuration parameters: Include.
# Include: **/Rakefile, **/*.rake
Rails/RakeEnvironment:
Exclude:
- 'lib/tasks/hooks.rake'
- 'lib/tasks/i18n.rake'
- 'lib/tasks/testing.rake'
# Configuration parameters: Include.
# Include: db/migrate/*.rb
Rails/ReversibleMigration:
Exclude:
- 'db/migrate/20191119020643_upgrade_cms.rb'
# Configuration parameters: Blacklist, Whitelist.
# Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
Rails/SkipsModelValidations:
Exclude:
- 'db/migrate/20190317023129_finished_boolean.rb'
- 'db/seeds.rb'
- 'db/migrate/20190910022329_add_photo_source.rb'
# Configuration parameters: AllowedChars.
Style/AsciiComments:
Exclude:
- 'config/initializers/comfortable_mexican_sofa.rb'
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, EnforcedStyle.
# SupportedStyles: nested, compact
@@ -54,6 +145,7 @@ Style/ClassAndModuleChildren:
Exclude:
- 'lib/actions/oauth_signup_action.rb'
- 'lib/haml/filters/escaped_markdown.rb'
- 'lib/haml/filters/growstuff_markdown.rb'
Style/CommentedKeyword:
Exclude:

View File

@@ -12,14 +12,14 @@ class AuthenticationsController < ApplicationController
@authentication = current_member.authentications
.create_with(
name: name,
token: auth['credentials']['token'],
name: name,
token: auth['credentials']['token'],
secret: auth['credentials']['secret']
)
.find_or_create_by(
provider: auth['provider'],
uid: auth['uid'],
name: name
uid: auth['uid'],
name: name
)
flash[:notice] = "Authentication successful."

View File

@@ -54,7 +54,7 @@ class ConversationsController < ApplicationController
def set_box
@boxes = {
'inbox' => { 'total' => mailbox.inbox.size, 'unread' => current_member.receipts.where(is_read: false).count },
'sent' => { 'total' => mailbox.sentbox.size, 'unread' => 0 },
'sent' => { 'total' => mailbox.sentbox.size, 'unread' => 0 },
'trash' => { 'total' => mailbox.trash.size, 'unread' => 0 }
}
@box = if params[:box].blank? || !@boxes.keys.include?(params[:box])

View File

@@ -50,8 +50,8 @@ class CropsController < ApplicationController
@term = params[:term]
@crops = CropSearchService.search(
@term, page: params[:page],
per_page: 36,
@term, page: params[:page],
per_page: 36,
current_member: current_member
)
respond_with @crops
@@ -202,13 +202,13 @@ class CropsController < ApplicationController
def crop_json_fields
{
include: {
plantings: {
plantings: {
include: {
owner: { only: %i(id login_name location latitude longitude) }
}
},
scientific_names: { only: [:name] },
alternate_names: { only: [:name] }
alternate_names: { only: [:name] }
}
}
end

View File

@@ -28,11 +28,11 @@ class LikesController < ApplicationController
def render_json(like, liked_by_member: true)
{
id: like.likeable.id,
like_count: like.likeable.likes.count,
id: like.likeable.id,
like_count: like.likeable.likes.count,
liked_by_member: liked_by_member,
description: ActionController::Base.helpers.pluralize(like.likeable.likes.count, "like"),
url: like_path(like, format: :json)
description: ActionController::Base.helpers.pluralize(like.likeable.likes.count, "like"),
url: like_path(like, format: :json)
}
end
@@ -40,8 +40,8 @@ class LikesController < ApplicationController
respond_to do |format|
format.html { redirect_to like.likeable }
format.json do
render(json: render_json(like,
liked_by_member: liked_by_member),
render(json: render_json(like,
liked_by_member: liked_by_member),
status: status_code)
end
end

View File

@@ -69,7 +69,7 @@ class MembersController < ApplicationController
EMAIL_TYPE_STRING = {
send_notification_email: "direct message notifications",
send_planting_reminder: "planting reminders"
send_planting_reminder: "planting reminders"
}.freeze
def member_params

View File

@@ -84,7 +84,7 @@ class PhotosController < ApplicationController
def find_or_create_photo_from_flickr_photo
photo = Photo.find_or_initialize_by(
source_id: photo_params[:source_id],
source: 'flickr'
source: 'flickr'
)
photo.update(photo_params)
photo.owner_id = current_member.id

View File

@@ -42,15 +42,15 @@ class PlantingsController < ApplicationController
def new
@planting = Planting.new(
planted_at: Time.zone.today,
owner: current_member,
garden: current_member.gardens.first
owner: current_member,
garden: current_member.gardens.first
)
@seed = Seed.find_by(slug: params[:seed_id]) if params[:seed_id]
@crop = Crop.approved.find_by(id: params[:crop_id]) || Crop.new
if params[:garden_id]
@planting.garden = Garden.find_by(
owner: current_member,
id: params[:garden_id]
id: params[:garden_id]
)
end

View File

@@ -53,9 +53,9 @@ module ApplicationHelper
return uri.to_s
end
Gravatar.new(member.email).image_url(size: size,
Gravatar.new(member.email).image_url(size: size,
default: :identicon,
ssl: true)
ssl: true)
end
# Returns a string with the quantity and the right pluralization for a

View File

@@ -1,5 +1,4 @@
module AutoSuggestHelper
# rubocop:disable Rails/OutputSafety
def auto_suggest(resource, source, options = {})
if options[:default] && !options[:default].new_record?
default = options[:default]
@@ -22,5 +21,4 @@ module AutoSuggestHelper
type="hidden" name="#{resource}[#{source}_id]" value="#{default_id}">
).html_safe
end
# rubocop:enable Rails/OutputSafety
end

View File

@@ -17,7 +17,6 @@ module GardensHelper
if plantings.blank?
"None"
else
# rubocop:disable Rails/OutputSafety
output = '<ul class="plantings">'
plantings.each do |planting|
output += "<li>"
@@ -27,7 +26,7 @@ module GardensHelper
end
output += '</ul>'
output.html_safe
# rubocop:enable Rails/OutputSafety
end
end
end

View File

@@ -19,7 +19,7 @@ class Notifier < ApplicationMailer
message = { member_id: @notification.recipient.id, type: :send_notification_email }
@signed_message = verifier.generate(message)
mail(to: @notification.recipient.email,
mail(to: @notification.recipient.email,
subject: @notification.subject)
end

View File

@@ -11,10 +11,10 @@ class Comment < ApplicationRecord
if recipient != sender
Notification.create(
recipient_id: recipient,
sender_id: sender,
subject: "#{author} commented on #{post.subject}",
body: body,
post_id: post.id
sender_id: sender,
subject: "#{author} commented on #{post.subject}",
body: body,
post_id: post.id
)
end
end

View File

@@ -4,10 +4,10 @@ module CropSearch
included do
####################################
# Elastic search configuration
searchkick word_start: %i(name alternate_names scientific_names),
searchkick word_start: %i(name alternate_names scientific_names),
case_sensitive: false,
merge_mappings: true,
mappings: {
mappings: {
properties: {
created_at: { type: :integer }
}
@@ -22,19 +22,19 @@ module CropSearch
def search_data
{
name: name,
slug: slug,
alternate_names: alternate_names.pluck(:name),
name: name,
slug: slug,
alternate_names: alternate_names.pluck(:name),
scientific_names: scientific_names.pluck(:name),
# boost the crops that are planted the most
plantings_count: plantings_count,
plantings_count: plantings_count,
# boost this crop for these members
planters_ids: plantings.pluck(:owner_id),
has_photos: photos.size.positive?,
photo: default_photo&.thumbnail_url,
scientific_name: default_scientific_name&.name,
description: description,
created_at: created_at.to_i
planters_ids: plantings.pluck(:owner_id),
has_photos: photos.size.positive?,
photo: default_photo&.thumbnail_url,
scientific_name: default_scientific_name&.name,
description: description,
created_at: created_at.to_i
}
end
end

View File

@@ -1,7 +1,7 @@
module MemberFlickr
extend ActiveSupport::Concern
included do # rubocop:disable Metrics/BlockLength
included do
# Authenticates against Flickr and returns an object we can use for subsequent api calls
def flickr
if @flickr.nil?
@@ -24,13 +24,13 @@ module MemberFlickr
result = if set
flickr.photosets.getPhotos(
photoset_id: set,
page: page_num,
per_page: 30
page: page_num,
per_page: 30
)
else
flickr.people.getPhotos(
user_id: 'me',
page: page_num,
user_id: 'me',
page: page_num,
per_page: 30
)
end

View File

@@ -1,7 +1,7 @@
module MemberNewsletter
extend ActiveSupport::Concern
included do # rubocop:disable Metrics/BlockLength
included do
after_save :update_newsletter_subscription
before_destroy :newsletter_unsubscribe
@@ -29,9 +29,9 @@ module MemberNewsletter
return true if Rails.env.test? && !testing
gibbon.lists.subscribe(
id: Rails.application.config.newsletter_list_id,
email: { email: email },
merge_vars: { login_name: login_name },
id: Rails.application.config.newsletter_list_id,
email: { email: email },
merge_vars: { login_name: login_name },
double_optin: false # they already confirmed their email with us
)
end
@@ -39,7 +39,7 @@ module MemberNewsletter
def newsletter_unsubscribe(gibbon = Gibbon::API.new, testing = false)
return true if Rails.env.test? && !testing
gibbon.lists.unsubscribe(id: Rails.application.config.newsletter_list_id,
gibbon.lists.unsubscribe(id: Rails.application.config.newsletter_list_id,
email: { email: email })
end
end

View File

@@ -1,7 +1,7 @@
module OpenFarmData
extend ActiveSupport::Concern
included do # rubocop:disable Metrics/BlockLength
included do
def update_openfarm_data!
OpenfarmService.new.update_crop(self)
end

View File

@@ -2,7 +2,7 @@ module Ownable
extend ActiveSupport::Concern
included do
belongs_to :owner, class_name: 'Member', # rubocop:disable Rails/InverseOf
belongs_to :owner, class_name: 'Member',
foreign_key: 'owner_id', counter_cache: true
default_scope { joins(:owner).merge(Member.kept) } # Ensures the owner still exists

View File

@@ -1,7 +1,7 @@
module PredictHarvest
extend ActiveSupport::Concern
included do # rubocop:disable Metrics/BlockLength
included do
# dates
def first_harvest_date
harvests_with_dates.minimum(:harvested_at)

View File

@@ -1,7 +1,7 @@
module PredictPlanting
extend ActiveSupport::Concern
included do # rubocop:disable Metrics/BlockLength
included do
## Triggers
before_save :calculate_lifespan

View File

@@ -48,10 +48,10 @@ class Crop < ApplicationRecord
## Wikipedia urls are only necessary when approving a crop
validates :en_wikipedia_url,
format: {
with: %r{\Ahttps?:\/\/en\.wikipedia\.org\/wiki\/[[:alnum:]%_\.()-]+\z},
with: %r{\Ahttps?:\/\/en\.wikipedia\.org\/wiki\/[[:alnum:]%_\.()-]+\z},
message: 'is not a valid English Wikipedia URL'
},
if: :approved?
if: :approved?
def to_s
name

View File

@@ -11,7 +11,7 @@ class CsvImporter
@crop = Crop.find_or_create_by(name: name)
@crop.update(
en_wikipedia_url: en_wikipedia_url,
creator_id: cropbot.id
creator_id: cropbot.id
)
add_parent(parent_name) if parent_name

View File

@@ -6,9 +6,9 @@ class Follow < ApplicationRecord
after_create do
Notification.create(
recipient_id: followed_id,
sender_id: follower_id,
subject: "#{follower.login_name} is now following you",
body: "#{follower.login_name} just followed you on #{ENV['GROWSTUFF_SITE_NAME']}. "
sender_id: follower_id,
subject: "#{follower.login_name} is now following you",
body: "#{follower.login_name} just followed you on #{ENV['GROWSTUFF_SITE_NAME']}. "
)
end
end

View File

@@ -32,7 +32,7 @@ class Garden < ApplicationRecord
validates :area,
numericality: { only_integer: false, greater_than_or_equal_to: 0 },
allow_nil: true
allow_nil: true
scope :located, lambda {
where.not(gardens: { location: '' })
@@ -41,12 +41,12 @@ class Garden < ApplicationRecord
}
AREA_UNITS_VALUES = {
"square metres" => "square metre",
"square feet" => "square foot",
"hectares" => "hectare",
"acres" => "acre"
"square feet" => "square foot",
"hectares" => "hectare",
"acres" => "acre"
}.freeze
validates :area_unit, inclusion: { in: AREA_UNITS_VALUES.values,
message: "%<value>s is not a valid area unit" },
validates :area_unit, inclusion: { in: AREA_UNITS_VALUES.values,
message: "%<value>s is not a valid area unit" },
allow_blank: true
after_validation :cleanup_area

View File

@@ -9,15 +9,15 @@ class Harvest < ApplicationRecord
# Constants
UNITS_VALUES = {
"individual" => "individual",
"bunches" => "bunch",
"sprigs" => "sprig",
"handfuls" => "handful",
"litres" => "litre",
"pints" => "pint",
"quarts" => "quart",
"buckets" => "bucket",
"baskets" => "basket",
"bushels" => "bushel"
"bunches" => "bunch",
"sprigs" => "sprig",
"handfuls" => "handful",
"litres" => "litre",
"pints" => "pint",
"quarts" => "quart",
"buckets" => "bucket",
"baskets" => "basket",
"bushels" => "bushel"
}.freeze
WEIGHT_UNITS_VALUES = {

View File

@@ -17,7 +17,7 @@ class Member < ApplicationRecord
has_many :plantings, foreign_key: 'owner_id', dependent: :destroy, inverse_of: :owner
has_many :seeds, foreign_key: 'owner_id', dependent: :destroy, inverse_of: :owner
has_many :harvests, foreign_key: 'owner_id', dependent: :destroy, inverse_of: :owner
has_and_belongs_to_many :roles # rubocop:disable Rails/HasAndBelongsToMany
has_and_belongs_to_many :roles
has_many :notifications, foreign_key: 'recipient_id', inverse_of: :recipient
has_many :sent_notifications, foreign_key: 'sender_id', inverse_of: :sender
has_many :authentications, dependent: :destroy
@@ -76,13 +76,13 @@ class Member < ApplicationRecord
# Requires acceptance of the Terms of Service
validates :tos_agreement, acceptance: { allow_nil: true, accept: true }
validates :login_name,
length: {
length: {
minimum: 2, maximum: 25, message: "should be between 2 and 25 characters long"
},
exclusion: {
exclusion: {
in: %w(growstuff admin moderator staff nearby), message: "name is reserved"
},
format: {
format: {
with: /\A\w+\z/, message: "may only include letters, numbers, or underscores"
},
uniqueness: {

View File

@@ -13,8 +13,8 @@ class Photo < ApplicationRecord
# creates a relationship for each assignee type
PHOTO_CAPABLE.each do |type|
has_many type.downcase.pluralize.to_s.to_sym,
through: :photo_associations,
source: :photographable,
through: :photo_associations,
source: :photographable,
source_type: type
end
@@ -31,13 +31,13 @@ class Photo < ApplicationRecord
licenses = flickr.photos.licenses.getInfo
license = licenses.find { |l| l.id == info.license }
{
title: calculate_title(info),
license_name: license.name,
license_url: license.url,
title: calculate_title(info),
license_name: license.name,
license_url: license.url,
thumbnail_url: FlickRaw.url_q(info),
fullsize_url: FlickRaw.url_z(info),
link_url: FlickRaw.url_photopage(info),
date_taken: info.dates.taken
fullsize_url: FlickRaw.url_z(info),
link_url: FlickRaw.url_photopage(info),
date_taken: info.dates.taken
}
end

View File

@@ -21,14 +21,14 @@ class Planting < ApplicationRecord
#
# Ancestry of food
belongs_to :parent_seed, class_name: 'Seed', # parent
belongs_to :parent_seed, class_name: 'Seed', # parent
foreign_key: 'parent_seed_id',
optional: true,
inverse_of: :child_plantings
has_many :child_seeds, class_name: 'Seed', # children
optional: true,
inverse_of: :child_plantings
has_many :child_seeds, class_name: 'Seed', # children
foreign_key: 'parent_planting_id',
inverse_of: :parent_planting,
dependent: :nullify
inverse_of: :parent_planting,
dependent: :nullify
##
## Scopes

View File

@@ -87,9 +87,9 @@ class Post < ApplicationRecord
Notification.create(
recipient_id: recipient_id,
sender_id: sender,
subject: "#{author} mentioned you in their post #{subject}",
body: body
sender_id: sender,
subject: "#{author} mentioned you in their post #{subject}",
body: body
)
end
end

View File

@@ -3,7 +3,7 @@ class Role < ApplicationRecord
friendly_id :name, use: %i(slugged finders)
validates :name, uniqueness: true, presence: true
has_and_belongs_to_many :members # rubocop:disable Rails/HasAndBelongsToMany
has_and_belongs_to_many :members
class << self
%i(crop_wranglers admins).each do |method|

View File

@@ -23,23 +23,23 @@ class Seed < ApplicationRecord
# Validations
validates :crop, approved: true
validates :crop, presence: { message: "must be present and exist in our database" }
validates :quantity, allow_nil: true,
validates :quantity, allow_nil: true,
numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :days_until_maturity_min, allow_nil: true,
validates :days_until_maturity_min, allow_nil: true,
numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :days_until_maturity_max, allow_nil: true,
validates :days_until_maturity_max, allow_nil: true,
numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :tradable_to, allow_blank: false,
inclusion: { in: TRADABLE_TO_VALUES, message: "You may only trade seed nowhere, "\
inclusion: { in: TRADABLE_TO_VALUES, message: "You may only trade seed nowhere, "\
"locally, nationally, or internationally" }
validates :organic, allow_blank: false,
inclusion: { in: ORGANIC_VALUES, message: "You must say whether the seeds "\
inclusion: { in: ORGANIC_VALUES, message: "You must say whether the seeds "\
"are organic or not, or that you don't know" }
validates :gmo, allow_blank: false,
inclusion: { in: GMO_VALUES, message: "You must say whether the seeds are "\
inclusion: { in: GMO_VALUES, message: "You must say whether the seeds are "\
"genetically modified or not, or that you don't know" }
validates :heirloom, allow_blank: false,
inclusion: { in: HEIRLOOM_VALUES, message: "You must say whether the seeds"\
inclusion: { in: HEIRLOOM_VALUES, message: "You must say whether the seeds"\
"are heirloom, hybrid, or unknown" }
#

View File

@@ -2,12 +2,12 @@ class CropSearchService
# Crop.search(string)
def self.search(query, page: 1, per_page: 12, current_member: nil)
search_params = {
page: page,
per_page: per_page,
fields: %i(name^5 alternate_names scientific_names),
match: :word_start,
boost_by: [:plantings_count],
includes: %i(scientific_names alternate_names),
page: page,
per_page: per_page,
fields: %i(name^5 alternate_names scientific_names),
match: :word_start,
boost_by: [:plantings_count],
includes: %i(scientific_names alternate_names),
misspellings: { edit_distance: 2 }
}
# prioritise crops the member has planted
@@ -20,22 +20,22 @@ class CropSearchService
body = {
"query": {
"function_score": {
"query": { "query_string": { "query": 'has_photos:true' } },
"query": { "query_string": { "query": 'has_photos:true' } },
"random_score": { "seed": DateTime.now.to_i }
}
}
}
Crop.search(
limit: limit,
load: false,
body: body
load: false,
body: body
)
end
def self.recent(limit)
Crop.search(
limit: limit,
load: false,
limit: limit,
load: false,
boost_by: { created_at: { factor: 100 } } # default factor is 1
)
end

View File

@@ -52,14 +52,14 @@ class OpenfarmService
next if Photo.find_by(source_id: picture.fetch('id'), source: 'openfarm')
photo = Photo.new(
source_id: picture.fetch('id'),
source: 'openfarm',
owner: @cropbot,
source_id: picture.fetch('id'),
source: 'openfarm',
owner: @cropbot,
thumbnail_url: data.fetch('thumbnail_url'),
fullsize_url: data.fetch('image_url'),
title: 'Open Farm photo',
license_name: 'No rights reserved',
link_url: "https://openfarm.cc/en/crops/#{name_to_slug(crop.name)}"
fullsize_url: data.fetch('image_url'),
title: 'Open Farm photo',
license_name: 'No rights reserved',
link_url: "https://openfarm.cc/en/crops/#{name_to_slug(crop.name)}"
)
if photo.valid?
Photo.transaction do

View File

@@ -1,5 +1,4 @@
# Require any additional compass plugins here.
# rubocop:disable Lint/UselessAssignment
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "app/assets/stylesheets"
@@ -21,4 +20,3 @@ images_dir = "app/assets/images"
preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
# rubocop:enable Lint/UselessAssignment

View File

@@ -1,4 +1,2 @@
# Require any additional compass plugins here.
# rubocop:disable Lint/UselessAssignment
project_type = :rails
# rubocop:enable Lint/UselessAssignment

View File

@@ -57,12 +57,12 @@ Rails.application.configure do
# Use a different cache store in production.
config.cache_store = :mem_cache_store,
(ENV["MEMCACHIER_SERVERS"] || "").split(","),
{ username: ENV["MEMCACHIER_USERNAME"],
password: ENV["MEMCACHIER_PASSWORD"],
failover: true,
socket_timeout: 1.5,
{ username: ENV["MEMCACHIER_USERNAME"],
password: ENV["MEMCACHIER_PASSWORD"],
failover: true,
socket_timeout: 1.5,
socket_failure_delay: 0.2,
down_retry_delay: 60 }
down_retry_delay: 60 }
# Use a real queuing backend for Active Job (and separate queues per environment)
# config.active_job.queue_adapter = :resque
@@ -90,12 +90,12 @@ Rails.application.configure do
config.action_mailer.default_url_options = { host: ENV['HOST'] }
config.action_mailer.smtp_settings = {
user_name: ENV['SENDGRID_USERNAME'],
password: ENV['SENDGRID_PASSWORD'],
domain: ENV['GROWSTUFF_EMAIL_DOMAIN'],
address: 'smtp.sendgrid.net',
port: 587,
authentication: :plain,
user_name: ENV['SENDGRID_USERNAME'],
password: ENV['SENDGRID_PASSWORD'],
domain: ENV['GROWSTUFF_EMAIL_DOMAIN'],
address: 'smtp.sendgrid.net',
port: 587,
authentication: :plain,
enable_starttls_auto: true
}
ActionMailer::Base.delivery_method = :smtp

View File

@@ -59,7 +59,7 @@ Geocoder.configure(lookup: :test)
Geocoder::Lookup::Test.add_stub(
"Amundsen-Scott Base, Antarctica", [
{
'latitude' => -90.0,
'latitude' => -90.0,
'longitude' => 0.0
}
]
@@ -68,12 +68,12 @@ Geocoder::Lookup::Test.add_stub(
Geocoder::Lookup::Test.add_stub(
"Philippines", [
{
'latitude' => 12.7503486,
'longitude' => 122.7312101,
'address' => 'Manila, Mnl, Philippines',
'state' => 'Manila',
'state_code' => 'Mnl',
'country' => 'Philippines',
'latitude' => 12.7503486,
'longitude' => 122.7312101,
'address' => 'Manila, Mnl, Philippines',
'state' => 'Manila',
'state_code' => 'Mnl',
'country' => 'Philippines',
'country_code' => 'PH'
}
]
@@ -82,7 +82,7 @@ Geocoder::Lookup::Test.add_stub(
Geocoder::Lookup::Test.add_stub(
"Greenwich, UK", [
{
'latitude' => 51.483061,
'latitude' => 51.483061,
'longitude' => -0.004151
}
]
@@ -91,7 +91,7 @@ Geocoder::Lookup::Test.add_stub(
Geocoder::Lookup::Test.add_stub(
"Edinburgh", [
{
'latitude' => 55.953252,
'latitude' => 55.953252,
'longitude' => -3.188267
}
]
@@ -107,15 +107,15 @@ end
OmniAuth.config.test_mode = true
# Fake the omniauth
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(provider: 'facebook',
uid: '123545',
info: {
name: "John Testerson",
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(provider: 'facebook',
uid: '123545',
info: {
name: "John Testerson",
nickname: 'JohnnyT',
email: 'example.oauth.facebook@example.com',
image: 'http://findicons.com/files/icons/1072/face_avatars/300/i04.png'
email: 'example.oauth.facebook@example.com',
image: 'http://findicons.com/files/icons/1072/face_avatars/300/i04.png'
},
credentials: {
token: "token",
token: "token",
secret: "donttell"
})

View File

@@ -54,12 +54,9 @@ ComfortableMexicanSofa.configure do |config|
# a previous version using this system. You can control how many revisions per
# object you want to keep. Set it to 0 if you wish to turn this feature off.
# config.revisions_limit = 25
# rubocop:disable Style/AsciiComments
# Locale definitions. If you want to define your own locale merge
# {:locale => 'Locale Title'} with this.
# config.locales = {:en => 'English', :es => 'Español'}
# rubocop:enable Style/AsciiComments
# Admin interface will respect the locale of the site being managed. However you can
# force it to English by setting this to `:en`

View File

@@ -1,12 +1,12 @@
require 'geocodable'
Geocoder.configure(
units: :km,
timeout: 10,
units: :km,
timeout: 10,
http_headers: {
"User-Agent" =>
"#{Rails.application.config.user_agent} #{Rails.application.config.user_agent_email}",
"From" => Rails.application.config.user_agent_email
"From" => Rails.application.config.user_agent_email
}
)
# This configuration takes precedence over environment/test.rb

View File

@@ -7,9 +7,9 @@ Rails.application.routes.draw do
resources :plant_parts
devise_for :members, controllers: {
registrations: "registrations",
passwords: "passwords",
sessions: "sessions",
registrations: "registrations",
passwords: "passwords",
sessions: "sessions",
omniauth_callbacks: "omniauth_callbacks"
}
devise_scope :member do

View File

@@ -113,7 +113,7 @@ class CreateCms < ActiveRecord::Migration[4.2]
end
add_index :comfy_cms_categories, %i(site_id categorized_type label),
unique: true,
name: 'index_cms_categories_on_site_id_and_cat_type_and_label'
name: 'index_cms_categories_on_site_id_and_cat_type_and_label'
create_table :comfy_cms_categorizations, force: true do |t|
t.integer :category_id, null: false
@@ -122,7 +122,7 @@ class CreateCms < ActiveRecord::Migration[4.2]
end
add_index :comfy_cms_categorizations, %i(category_id categorized_type categorized_id),
unique: true,
name: 'index_cms_categorizations_on_cat_id_and_catd_type_and_catd_id'
name: 'index_cms_categorizations_on_cat_id_and_catd_type_and_catd_id'
end
def self.down

View File

@@ -7,16 +7,16 @@ class SeedUsage < ActiveRecord::Migration[4.2]
# plantings can be grown from a seed
add_column(:plantings, :parent_seed_id, :integer)
add_foreign_key(:plantings, :seeds,
column: :parent_seed_id,
column: :parent_seed_id,
primary_key: :id,
name: :parent_seed,
on_delete: :nullify)
name: :parent_seed,
on_delete: :nullify)
# seeds can be harvest from planting
add_column(:seeds, :parent_planting_id, :integer)
add_foreign_key(:seeds, :plantings,
column: :parent_planting_id,
column: :parent_planting_id,
primary_key: :id,
name: :parent_planting,
on_delete: :nullify)
name: :parent_planting,
on_delete: :nullify)
end
end

View File

@@ -57,9 +57,9 @@ def load_test_users # rubocop:disable Metrics/AbcSize
(1..member_size).each do |i|
@user = Member.new(
login_name: "test#{i}",
email: "test#{i}@example.com",
password: "password#{i}",
login_name: "test#{i}",
email: "test#{i}@example.com",
password: "password#{i}",
tos_agreement: true
)
@user.skip_confirmation!
@@ -79,11 +79,11 @@ def load_test_users # rubocop:disable Metrics/AbcSize
# Create a planting by the member
Planting.create(
owner_id: @user.id,
garden_id: @user.gardens.first.id,
planted_at: Time.zone.today,
crop_id: Crop.find(i % Crop.all.size + 1).id,
sunniness: select_random_item(Planting::SUNNINESS_VALUES),
owner_id: @user.id,
garden_id: @user.gardens.first.id,
planted_at: Time.zone.today,
crop_id: Crop.find(i % Crop.all.size + 1).id,
sunniness: select_random_item(Planting::SUNNINESS_VALUES),
planted_from: select_random_item(Planting::PLANTED_FROM_VALUES)
)
end
@@ -94,9 +94,9 @@ end
def load_admin_users
puts "Adding admin and crop wrangler members..."
@admin_user = Member.new(
login_name: "admin1",
email: "admin1@example.com",
password: "password1",
login_name: "admin1",
email: "admin1@example.com",
password: "password1",
tos_agreement: true
)
@admin_user.skip_confirmation!
@@ -104,9 +104,9 @@ def load_admin_users
@admin_user.save!
@wrangler_user = Member.new(
login_name: "wrangler1",
email: "wrangler1@example.com",
password: "password1",
login_name: "wrangler1",
email: "wrangler1@example.com",
password: "password1",
tos_agreement: true
)
@wrangler_user.skip_confirmation!
@@ -118,9 +118,9 @@ def create_cropbot
return if Member.find_by(login_name: 'cropbot')
@cropbot_user = Member.new(
login_name: "cropbot",
email: Rails.application.config.bot_email,
password: SecureRandom.urlsafe_base64(64),
login_name: "cropbot",
email: Rails.application.config.bot_email,
password: SecureRandom.urlsafe_base64(64),
tos_agreement: true
)
@cropbot_user.skip_confirmation!

View File

@@ -41,14 +41,14 @@ class Growstuff::OauthSignupAction
authentication = member.authentications
.create_with(
name: name,
token: auth['credentials']['token'],
name: name,
token: auth['credentials']['token'],
secret: auth['credentials']['secret']
)
.find_or_create_by(
provider: auth['provider'],
uid: auth['uid'],
name: name,
provider: auth['provider'],
uid: auth['uid'],
name: name,
member_id: member.id
)

View File

@@ -1,6 +1,6 @@
require 'bluecloth'
module Haml::Filters # rubocop:disable Style/ClassAndModuleChildren
module Haml::Filters
module GrowstuffMarkdown
include Haml::Filters::Base

View File

@@ -15,25 +15,25 @@ RSpec.describe Api::V1::PlantingsController, type: :controller do
let!(:my_planting) { FactoryBot.create(:planting, owner: member, planted_at: '2000-01-01') }
let(:expected_attributes) do
{
'crop-name' => my_planting.crop.name,
'crop-slug' => my_planting.crop.slug,
'description' => my_planting.description,
'expected-lifespan' => nil,
'crop-name' => my_planting.crop.name,
'crop-slug' => my_planting.crop.slug,
'description' => my_planting.description,
'expected-lifespan' => nil,
'finish-predicted-at' => nil,
'finished' => my_planting.finished,
'finished-at' => my_planting.finished_at,
'first-harvest-date' => nil,
'last-harvest-date' => nil,
'latitude' => my_planting.garden.latitude,
'longitude' => my_planting.garden.longitude,
'location' => my_planting.garden.location,
'percentage-grown' => nil,
'planted-at' => '2000-01-01',
'planted-from' => my_planting.planted_from,
'quantity' => my_planting.quantity,
'slug' => my_planting.slug,
'sunniness' => nil,
'thumbnail' => nil
'finished' => my_planting.finished,
'finished-at' => my_planting.finished_at,
'first-harvest-date' => nil,
'last-harvest-date' => nil,
'latitude' => my_planting.garden.latitude,
'longitude' => my_planting.garden.longitude,
'location' => my_planting.garden.location,
'percentage-grown' => nil,
'planted-at' => '2000-01-01',
'planted-from' => my_planting.planted_from,
'quantity' => my_planting.quantity,
'slug' => my_planting.slug,
'sunniness' => nil,
'thumbnail' => nil
}
end
@@ -49,25 +49,25 @@ RSpec.describe Api::V1::PlantingsController, type: :controller do
let(:expected_attributes) do
{
'crop-name' => my_planting.crop.name,
'crop-slug' => my_planting.crop.slug,
'description' => my_planting.description,
'expected-lifespan' => nil,
'crop-name' => my_planting.crop.name,
'crop-slug' => my_planting.crop.slug,
'description' => my_planting.description,
'expected-lifespan' => nil,
'finish-predicted-at' => nil,
'finished' => my_planting.finished,
'finished-at' => my_planting.finished_at,
'first-harvest-date' => nil,
'last-harvest-date' => nil,
'latitude' => my_planting.garden.latitude,
'longitude' => my_planting.garden.longitude,
'location' => my_planting.garden.location,
'percentage-grown' => nil,
'planted-at' => '2000-01-01',
'planted-from' => my_planting.planted_from,
'quantity' => my_planting.quantity,
'slug' => my_planting.slug,
'sunniness' => nil,
'thumbnail' => photo.thumbnail_url
'finished' => my_planting.finished,
'finished-at' => my_planting.finished_at,
'first-harvest-date' => nil,
'last-harvest-date' => nil,
'latitude' => my_planting.garden.latitude,
'longitude' => my_planting.garden.longitude,
'location' => my_planting.garden.location,
'percentage-grown' => nil,
'planted-at' => '2000-01-01',
'planted-from' => my_planting.planted_from,
'quantity' => my_planting.quantity,
'slug' => my_planting.slug,
'sunniness' => nil,
'thumbnail' => photo.thumbnail_url
}
end
let(:photo) { FactoryBot.create(:photo, owner: my_planting.owner) }

View File

@@ -7,9 +7,9 @@ describe AuthenticationsController do
controller.stub(:current_member) { @member }
@auth = FactoryBot.create(:authentication, member: @member)
request.env['omniauth.auth'] = {
'provider' => 'foo',
'uid' => 'bar',
'info' => { 'nickname' => 'blah' },
'provider' => 'foo',
'uid' => 'bar',
'info' => { 'nickname' => 'blah' },
'credentials' => { 'token' => 'blah', 'secret' => 'blah' }
}
end

View File

@@ -5,9 +5,9 @@ describe ForumsController do
def valid_attributes
{
"name" => "MyString",
"name" => "MyString",
"description" => "Something",
"owner_id" => 1
"owner_id" => 1
}
end

View File

@@ -5,10 +5,10 @@ describe HarvestsController do
def valid_attributes
{
owner_id: subject.current_member.id,
crop_id: FactoryBot.create(:crop).id,
owner_id: subject.current_member.id,
crop_id: FactoryBot.create(:crop).id,
plant_part_id: FactoryBot.create(:plant_part).id,
harvested_at: '2017-01-01'
harvested_at: '2017-01-01'
}
end
@@ -187,7 +187,7 @@ describe HarvestsController do
describe "does not save planting_id" do
before do
put :update, params: { id: harvest.to_param,
put :update, params: { id: harvest.to_param,
harvest: valid_attributes.merge(planting_id: not_my_planting.id) }
end

View File

@@ -6,8 +6,8 @@ describe PhotoAssociationsController do
describe "destroy" do
let(:valid_params) do
{
id: harvest.id,
type: 'harvest',
id: harvest.id,
type: 'harvest',
photo_id: photo.id
}
end

View File

@@ -71,12 +71,12 @@ describe PhotosController do
describe "POST create" do
before do
Photo.any_instance.stub(:flickr_metadata).and_return(title: "A Heartbreaking work of staggering genius",
license_name: "CC-BY",
license_url: "http://example.com/aybpl",
Photo.any_instance.stub(:flickr_metadata).and_return(title: "A Heartbreaking work of staggering genius",
license_name: "CC-BY",
license_url: "http://example.com/aybpl",
thumbnail_url: "http://example.com/thumb.jpg",
fullsize_url: "http://example.com/full.jpg",
link_url: "http://example.com")
fullsize_url: "http://example.com/full.jpg",
link_url: "http://example.com")
end
let(:member) { FactoryBot.create(:member) }

View File

@@ -6,7 +6,7 @@ describe PlantingsController do
def valid_attributes
{
garden_id: FactoryBot.create(:garden, owner: subject.current_member).id,
crop_id: FactoryBot.create(:crop).id
crop_id: FactoryBot.create(:crop).id
}
end

View File

@@ -123,8 +123,8 @@ describe "crop detail page", js: true do
context 'predictions' do
let!(:planting) do
FactoryBot.create(:planting, crop: crop,
planted_at: 100.days.ago,
FactoryBot.create(:planting, crop: crop,
planted_at: 100.days.ago,
finished_at: 1.day.ago)
end

View File

@@ -78,11 +78,11 @@ describe "Gardens#index", :js do
# time to finished = 90 days
FactoryBot.create(:harvest,
harvested_at: 50.days.ago,
crop: crop,
planting: FactoryBot.create(:planting,
crop: crop,
planted_at: 100.days.ago,
finished_at: 10.days.ago))
crop: crop,
planting: FactoryBot.create(:planting,
crop: crop,
planted_at: 100.days.ago,
finished_at: 10.days.ago))
crop.plantings.each(&:update_harvest_days!)
crop.update_lifespan_medians
crop.update_harvest_medians
@@ -95,9 +95,9 @@ describe "Gardens#index", :js do
describe 'harvest still growing' do
let!(:planting) do
FactoryBot.create :planting,
crop: crop,
owner: member,
garden: garden,
crop: crop,
owner: member,
garden: garden,
planted_at: Time.zone.today
end

View File

@@ -19,9 +19,9 @@ describe 'Test with visual testing', type: :feature, js: true do
let(:tomato_photo) do
FactoryBot.create :photo,
title: 'look at my tomatoes',
owner: member,
fullsize_url: 'https://farm1.staticflickr.com/177/432250619_2fe19d067d_z.jpg',
title: 'look at my tomatoes',
owner: member,
fullsize_url: 'https://farm1.staticflickr.com/177/432250619_2fe19d067d_z.jpg',
thumbnail_url: 'https://farm1.staticflickr.com/177/432250619_2fe19d067d_q.jpg'
end
let(:post_body) do
@@ -69,12 +69,12 @@ rest of the garden.
Timecop.freeze(Time.zone.local(2019, 1, 1))
{
chard: 'https://farm9.staticflickr.com/8516/8519911893_1759c28965_q.jpg',
apple: 'https://farm5.staticflickr.com/4748/38932178855_6fe9bcdb48_q.jpg',
pear: 'https://farm1.staticflickr.com/113/250984726_0fc31fea6d_q.jpg',
popcorn: 'https://farm8.staticflickr.com/7893/33150160528_24a689c6bc_q.jpg',
chard: 'https://farm9.staticflickr.com/8516/8519911893_1759c28965_q.jpg',
apple: 'https://farm5.staticflickr.com/4748/38932178855_6fe9bcdb48_q.jpg',
pear: 'https://farm1.staticflickr.com/113/250984726_0fc31fea6d_q.jpg',
popcorn: 'https://farm8.staticflickr.com/7893/33150160528_24a689c6bc_q.jpg',
eggplant: 'https://farm8.staticflickr.com/7856/47068736892_1af9b8a4ba_q.jpg',
maize: 'https://farm66.staticflickr.com/65535/46739264475_7cb55b2cbb_q.jpg'
maize: 'https://farm66.staticflickr.com/65535/46739264475_7cb55b2cbb_q.jpg'
}.each do |crop_type, photo_url|
crop = FactoryBot.create crop_type, creator: someone_else
crop.reindex
@@ -110,9 +110,9 @@ rest of the garden.
planting = FactoryBot.create :planting, planted_at: 1.year.ago, sunniness: 'sun', planted_from: 'seed', crop: tomato
FactoryBot.create(:harvest,
crop: tomato,
plant_part: FactoryBot.create(:plant_part, name: 'berry'),
planting: planting,
crop: tomato,
plant_part: FactoryBot.create(:plant_part, name: 'berry'),
planting: planting,
harvested_at: 1.day.ago)
post = FactoryBot.create :post, subject: 'tomatoes are delicious'

View File

@@ -4,7 +4,7 @@ describe HarvestsHelper do
describe "display_quantity" do
it "blank" do
harvest = FactoryBot.create(:harvest,
quantity: nil,
quantity: nil,
weight_quantity: nil)
result = helper.display_quantity(harvest)
result.should eq 'not specified'
@@ -12,8 +12,8 @@ describe HarvestsHelper do
it '3 individual' do
harvest = FactoryBot.create(:harvest,
quantity: 3,
unit: 'individual',
quantity: 3,
unit: 'individual',
weight_quantity: nil)
result = helper.display_quantity(harvest)
result.should eq '3'
@@ -21,8 +21,8 @@ describe HarvestsHelper do
it '1 bunch' do
harvest = FactoryBot.create(:harvest,
quantity: 1,
unit: 'bunch',
quantity: 1,
unit: 'bunch',
weight_quantity: nil)
result = helper.display_quantity(harvest)
result.should eq '1 bunch'
@@ -30,8 +30,8 @@ describe HarvestsHelper do
it '3 bunches' do
harvest = FactoryBot.create(:harvest,
quantity: 3,
unit: 'bunch',
quantity: 3,
unit: 'bunch',
weight_quantity: nil)
result = helper.display_quantity(harvest)
result.should eq '3 bunches'
@@ -39,30 +39,30 @@ describe HarvestsHelper do
it '3 kg' do
harvest = FactoryBot.create(:harvest,
quantity: nil,
unit: nil,
quantity: nil,
unit: nil,
weight_quantity: 3,
weight_unit: 'kg')
weight_unit: 'kg')
result = helper.display_quantity(harvest)
result.should eq '3 kg'
end
it '3 individual weighing 3 kg' do
harvest = FactoryBot.create(:harvest,
quantity: 3,
unit: 'individual',
quantity: 3,
unit: 'individual',
weight_quantity: 3,
weight_unit: 'kg')
weight_unit: 'kg')
result = helper.display_quantity(harvest)
result.should eq '3, weighing 3 kg'
end
it '3 bunches weighing 3 kg' do
harvest = FactoryBot.create(:harvest,
quantity: 3,
unit: 'bunch',
quantity: 3,
unit: 'bunch',
weight_quantity: 3,
weight_unit: 'kg')
weight_unit: 'kg')
result = helper.display_quantity(harvest)
result.should eq '3 bunches, weighing 3 kg'
end

View File

@@ -6,18 +6,18 @@ describe PlantingsHelper do
it "does not have a quantity nor a planted from value provided" do
planting = FactoryBot.build(:planting,
quantity: nil,
quantity: nil,
planted_from: '',
owner: member)
owner: member)
result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted magic bean."
end
it "does not have a quantity provided" do
planting = FactoryBot.build(:planting,
quantity: nil,
quantity: nil,
planted_from: 'seed',
owner: member)
owner: member)
result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted seeds."
end
@@ -25,18 +25,18 @@ describe PlantingsHelper do
context "when quantity is greater than 1" do
it "does not have a planted from value provided" do
planting = FactoryBot.build(:planting,
quantity: 10,
quantity: 10,
planted_from: '',
owner: member)
owner: member)
result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted 10 units."
end
it "does have a planted from value provided" do
planting = FactoryBot.build(:planting,
quantity: 5,
quantity: 5,
planted_from: 'seed',
owner: member)
owner: member)
result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted 5 seeds."
end
@@ -45,18 +45,18 @@ describe PlantingsHelper do
context "when quantity is 1" do
it "does not have a planted from value provided" do
planting = FactoryBot.build(:planting,
quantity: 1,
quantity: 1,
planted_from: '',
owner: member)
owner: member)
result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted 1 unit."
end
it "does have a planted from value provided" do
planting = FactoryBot.build(:planting,
quantity: 1,
quantity: 1,
planted_from: 'seed',
owner: member)
owner: member)
result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted 1 seed."
end

View File

@@ -8,16 +8,16 @@ describe 'Growstuff::OauthSignupAction' do
context 'with a valid authentication' do
before do
@auth = OmniAuth::AuthHash.new('provider' => 'facebook',
'uid' => '123545',
'info' => {
'name' => "John Testerson's Brother",
@auth = OmniAuth::AuthHash.new('provider' => 'facebook',
'uid' => '123545',
'info' => {
'name' => "John Testerson's Brother",
'nickname' => 'JohnnyB',
'email' => 'example.oauth.facebook@example.com',
'image' => 'http://findicons.com/files/icons/1072/face_avatars/300/i04.png'
'email' => 'example.oauth.facebook@example.com',
'image' => 'http://findicons.com/files/icons/1072/face_avatars/300/i04.png'
},
'credentials' => {
'token' => "token",
'token' => "token",
'secret' => "donttell"
})
end
@@ -74,8 +74,8 @@ describe 'Growstuff::OauthSignupAction' do
@auth['info']['email'] = 'never.used.oauth@yahoo.com'
Member.where(email: @auth['info']['email']).delete_all
@existing_member = create :member, email: @auth['info']['email'],
login_name: 'existing',
@existing_member = create :member, email: @auth['info']['email'],
login_name: 'existing',
preferred_avatar_uri: 'http://cl.jroo.me/z3/W/H/K/e/a.baa-very-cool-hat-you-.jpg'
@member = @action.find_or_create_from_authorization(@auth)
@@ -118,13 +118,13 @@ describe 'Growstuff::OauthSignupAction' do
Member.where(email: @auth['info']['email']).delete_all
Authentication.delete_all
@existing_member = create :member, email: @auth['info']['email'],
login_name: 'schrodingerscat',
@existing_member = create :member, email: @auth['info']['email'],
login_name: 'schrodingerscat',
preferred_avatar_uri: 'http://cl.jroo.me/z3/W/H/K/e/a.baa-very-cool-hat-you-.jpg'
@existing_authentication = @existing_member.authentications.create(provider: 'facebook',
uid: '123545',
name: "John Testerson's Brother",
@existing_authentication = @existing_member.authentications.create(provider: 'facebook',
uid: '123545',
name: "John Testerson's Brother",
member_id: @existing_member.id)
@member = @action.find_or_create_from_authorization(@auth)

View File

@@ -20,13 +20,13 @@ describe Ability do
ability.should_not be_able_to(:create,
FactoryBot.create(:notification,
recipient: member,
sender: member))
sender: member))
end
it "member can send messages to someone else" do
ability.should be_able_to(:create,
FactoryBot.create(:notification,
recipient: FactoryBot.create(:member),
sender: member))
sender: member))
end
end

View File

@@ -10,8 +10,8 @@ describe AlternateName do
it 'is possible to add multiple alternate names to a crop' do
crop = an.crop
an2 = AlternateName.create(
name: "really alternative tomato",
crop_id: crop.id,
name: "really alternative tomato",
crop_id: crop.id,
creator_id: an.creator.id
)
crop.alternate_names << an2

View File

@@ -271,20 +271,20 @@ describe Crop do
@root = FactoryBot.create(:plant_part, name: 'root')
@bulb = FactoryBot.create(:plant_part, name: 'bulb')
@harvest1 = FactoryBot.create(:harvest,
crop: crop,
crop: crop,
plant_part: @fruit)
@harvest2 = FactoryBot.create(:harvest,
crop: crop,
crop: crop,
plant_part: @fruit)
@harvest3 = FactoryBot.create(:harvest,
crop: crop,
crop: crop,
plant_part: @seed)
@harvest4 = FactoryBot.create(:harvest,
crop: crop,
crop: crop,
plant_part: @root)
crop.popular_plant_parts.should == { [@fruit.id, @fruit.name] => 2,
[@seed.id, @seed.name] => 1,
[@root.id, @root.name] => 1 }
[@seed.id, @seed.name] => 1,
[@root.id, @root.name] => 1 }
end
end
@@ -540,15 +540,15 @@ describe Crop do
context "crop rejections" do
let!(:rejected_reason) do
FactoryBot.create(:crop, name: 'tomato',
approval_status: 'rejected',
FactoryBot.create(:crop, name: 'tomato',
approval_status: 'rejected',
reason_for_rejection: 'not edible')
end
let!(:rejected_other) do
FactoryBot.create(:crop, name: 'tomato',
approval_status: 'rejected',
FactoryBot.create(:crop, name: 'tomato',
approval_status: 'rejected',
reason_for_rejection: 'other',
rejection_notes: 'blah blah blah')
rejection_notes: 'blah blah blah')
end
describe "rejecting a crop" do

View File

@@ -150,74 +150,74 @@ describe Harvest do
let(:crop) { FactoryBot.create(:crop, name: "apricot") }
it "apricots" do
@h = FactoryBot.create(:harvest, crop: crop,
quantity: nil,
unit: nil,
@h = FactoryBot.create(:harvest, crop: crop,
quantity: nil,
unit: nil,
weight_quantity: nil,
weight_unit: nil)
weight_unit: nil)
expect(@h.to_s).to eq "apricots"
end
it "1 individual apricot" do
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 1,
unit: 'individual',
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 1,
unit: 'individual',
weight_quantity: nil,
weight_unit: nil)
weight_unit: nil)
expect(@h.to_s).to eq "1 individual apricot"
end
it "10 individual apricots" do
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 10,
unit: 'individual',
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 10,
unit: 'individual',
weight_quantity: nil,
weight_unit: nil)
weight_unit: nil)
expect(@h.to_s).to eq "10 individual apricots"
end
it "1 bushel of apricots" do
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 1,
unit: 'bushel',
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 1,
unit: 'bushel',
weight_quantity: nil,
weight_unit: nil)
weight_unit: nil)
expect(@h.to_s).to eq "1 bushel of apricots"
end
it "1.5 bushels of apricots" do
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 1.5,
unit: 'bushel',
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 1.5,
unit: 'bushel',
weight_quantity: nil,
weight_unit: nil)
weight_unit: nil)
expect(@h.to_s).to eq "1.5 bushels of apricots"
end
it "10 bushels of apricots" do
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 10,
unit: 'bushel',
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 10,
unit: 'bushel',
weight_quantity: nil,
weight_unit: nil)
weight_unit: nil)
expect(@h.to_s).to eq "10 bushels of apricots"
end
it "apricots weighing 1.2 kg" do
@h = FactoryBot.create(:harvest, crop: crop,
quantity: nil,
unit: nil,
@h = FactoryBot.create(:harvest, crop: crop,
quantity: nil,
unit: nil,
weight_quantity: 1.2,
weight_unit: 'kg')
weight_unit: 'kg')
expect(@h.to_s).to eq "apricots weighing 1.2 kg"
end
it "10 bushels of apricots weighing 100 kg" do
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 10,
unit: 'bushel',
@h = FactoryBot.create(:harvest, crop: crop,
quantity: 10,
unit: 'bushel',
weight_quantity: 100,
weight_unit: 'kg')
weight_unit: 'kg')
expect(@h.to_s).to eq "10 bushels of apricots weighing 100 kg"
end
end

View File

@@ -11,10 +11,10 @@ describe PlantPart do
@tomato = FactoryBot.create(:tomato)
@pp1 = FactoryBot.create(:plant_part)
@h1 = FactoryBot.create(:harvest,
crop: @tomato,
crop: @tomato,
plant_part: @pp1)
@h2 = FactoryBot.create(:harvest,
crop: @maize,
crop: @maize,
plant_part: @pp1)
@pp1.crops.should include @tomato
@pp1.crops.should include @maize
@@ -24,10 +24,10 @@ describe PlantPart do
@maize = FactoryBot.create(:maize)
@pp1 = FactoryBot.create(:plant_part)
@h1 = FactoryBot.create(:harvest,
crop: @maize,
crop: @maize,
plant_part: @pp1)
@h2 = FactoryBot.create(:harvest,
crop: @maize,
crop: @maize,
plant_part: @pp1)
@pp1.crops.should eq [@maize]
end

View File

@@ -177,8 +177,8 @@ describe Planting do
before do
FactoryBot.create(:harvest,
planting: planting,
crop: planting.crop,
planting: planting,
crop: planting.crop,
harvested_at: 10.days.ago)
planting.update_harvest_days!
planting.crop.update_harvest_medians
@@ -443,8 +443,8 @@ describe Planting do
# this one is newer, and has the same owner, through the garden
@planting2 = FactoryBot.create(:planting,
created_at: 1.minute.ago,
garden: @planting1.garden,
owner: @planting1.owner)
garden: @planting1.garden,
owner: @planting1.owner)
@planting2.photos << FactoryBot.create(:photo, owner: @planting2.owner)
@planting2.save

View File

@@ -71,7 +71,7 @@ describe Post do
end
it "sets recent activity to comment time" do
comment = FactoryBot.create(:comment, post: post,
comment = FactoryBot.create(:comment, post: post,
created_at: 1.hour.ago)
post.recent_activity.to_i.should eq comment.created_at.to_i
end

View File

@@ -6,16 +6,16 @@ RSpec.describe 'Crops', type: :request do
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
let!(:crop) { FactoryBot.create :crop }
let(:crop_encoded_as_json_api) do
{ "id" => crop.id.to_s,
"type" => "crops",
"links" => { "self" => resource_url },
"attributes" => attributes,
{ "id" => crop.id.to_s,
"type" => "crops",
"links" => { "self" => resource_url },
"attributes" => attributes,
"relationships" => {
"plantings" => plantings_as_json_api,
"parent" => parent_as_json_api,
"harvests" => harvests_as_json_api,
"seeds" => seeds_as_json_api,
"photos" => photos_as_json_api
"parent" => parent_as_json_api,
"harvests" => harvests_as_json_api,
"seeds" => seeds_as_json_api,
"photos" => photos_as_json_api
} }
end
@@ -23,43 +23,43 @@ RSpec.describe 'Crops', type: :request do
let(:seeds_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/seeds",
{ "self" => "#{resource_url}/relationships/seeds",
"related" => "#{resource_url}/seeds" } }
end
let(:harvests_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/harvests",
{ "self" => "#{resource_url}/relationships/harvests",
"related" => "#{resource_url}/harvests" } }
end
let(:parent_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/parent",
{ "self" => "#{resource_url}/relationships/parent",
"related" => "#{resource_url}/parent" } }
end
let(:plantings_as_json_api) do
{ "links" =>
{ "self" =>
{ "self" =>
"#{resource_url}/relationships/plantings",
"related" => "#{resource_url}/plantings" } }
end
let(:photos_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/photos",
{ "self" => "#{resource_url}/relationships/photos",
"related" => "#{resource_url}/photos" } }
end
let(:attributes) do
{
"name" => crop.name,
"en-wikipedia-url" => crop.en_wikipedia_url,
"perennial" => false,
"median-lifespan" => nil,
"name" => crop.name,
"en-wikipedia-url" => crop.en_wikipedia_url,
"perennial" => false,
"median-lifespan" => nil,
"median-days-to-first-harvest" => nil,
"median-days-to-last-harvest" => nil
"median-days-to-last-harvest" => nil
}
end

View File

@@ -6,35 +6,35 @@ RSpec.describe 'Gardens', type: :request do
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
let!(:garden) { FactoryBot.create :garden }
let(:garden_encoded_as_json_api) do
{ "id" => garden.id.to_s,
"type" => "gardens",
"links" => { "self" => resource_url },
"attributes" => { "name" => garden.name },
{ "id" => garden.id.to_s,
"type" => "gardens",
"links" => { "self" => resource_url },
"attributes" => { "name" => garden.name },
"relationships" =>
{
"owner" => owner_as_json_api,
"owner" => owner_as_json_api,
"plantings" => plantings_as_json_api,
"photos" => photos_as_json_api
"photos" => photos_as_json_api
} }
end
let(:resource_url) { "http://www.example.com/api/v1/gardens/#{garden.id}" }
let(:plantings_as_json_api) do
{ "links" =>
{ "self" =>
{ "self" =>
"#{resource_url}/relationships/plantings",
"related" => "#{resource_url}/plantings" } }
end
let(:owner_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/owner",
{ "self" => "#{resource_url}/relationships/owner",
"related" => "#{resource_url}/owner" } }
end
let(:photos_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/photos",
{ "self" => "#{resource_url}/relationships/photos",
"related" => "#{resource_url}/photos" } }
end

View File

@@ -6,15 +6,15 @@ RSpec.describe 'Harvests', type: :request do
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
let!(:harvest) { FactoryBot.create :harvest }
let(:harvest_encoded_as_json_api) do
{ "id" => harvest.id.to_s,
"type" => "harvests",
"links" => { "self" => resource_url },
"attributes" => attributes,
{ "id" => harvest.id.to_s,
"type" => "harvests",
"links" => { "self" => resource_url },
"attributes" => attributes,
"relationships" => {
"crop" => crop_as_json_api,
"crop" => crop_as_json_api,
"planting" => planting_as_json_api,
"owner" => owner_as_json_api,
"photos" => photos_as_json_api
"owner" => owner_as_json_api,
"photos" => photos_as_json_api
} }
end
@@ -22,38 +22,38 @@ RSpec.describe 'Harvests', type: :request do
let(:crop_as_json_api) do
{ "links" =>
{ "self" =>
{ "self" =>
"#{resource_url}/relationships/crop",
"related" => "#{resource_url}/crop" } }
end
let(:owner_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/owner",
{ "self" => "#{resource_url}/relationships/owner",
"related" => "#{resource_url}/owner" } }
end
let(:planting_as_json_api) do
{ "links" =>
{ "self" =>
{ "self" =>
"#{resource_url}/relationships/planting",
"related" => "#{resource_url}/planting" } }
end
let(:photos_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/photos",
{ "self" => "#{resource_url}/relationships/photos",
"related" => "#{resource_url}/photos" } }
end
let(:attributes) do
{
"harvested-at" => "2015-09-17",
"description" => harvest.description,
"unit" => harvest.unit,
"harvested-at" => "2015-09-17",
"description" => harvest.description,
"unit" => harvest.unit,
"weight-quantity" => harvest.weight_quantity.to_s,
"weight-unit" => harvest.weight_unit,
"si-weight" => harvest.si_weight
"weight-unit" => harvest.weight_unit,
"si-weight" => harvest.si_weight
}
end

View File

@@ -6,16 +6,16 @@ RSpec.describe 'Members', type: :request do
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
let!(:member) { FactoryBot.create :member }
let(:member_encoded_as_json_api) do
{ "id" => member.id.to_s,
"type" => "members",
"links" => { "self" => resource_url },
"attributes" => attributes,
{ "id" => member.id.to_s,
"type" => "members",
"links" => { "self" => resource_url },
"attributes" => attributes,
"relationships" => {
"gardens" => gardens_as_json_api,
"harvests" => harvests_as_json_api,
"photos" => photos_as_json_api,
"gardens" => gardens_as_json_api,
"harvests" => harvests_as_json_api,
"photos" => photos_as_json_api,
"plantings" => plantings_as_json_api,
"seeds" => seeds_as_json_api
"seeds" => seeds_as_json_api
} }
end
@@ -23,38 +23,38 @@ RSpec.describe 'Members', type: :request do
let(:harvests_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/harvests",
{ "self" => "#{resource_url}/relationships/harvests",
"related" => "#{resource_url}/harvests" } }
end
let(:photos_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/photos",
{ "self" => "#{resource_url}/relationships/photos",
"related" => "#{resource_url}/photos" } }
end
let(:seeds_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/seeds",
{ "self" => "#{resource_url}/relationships/seeds",
"related" => "#{resource_url}/seeds" } }
end
let(:plantings_as_json_api) do
{ "links" =>
{ "self" =>
{ "self" =>
"#{resource_url}/relationships/plantings",
"related" => "#{resource_url}/plantings" } }
end
let(:gardens_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/gardens",
{ "self" => "#{resource_url}/relationships/gardens",
"related" => "#{resource_url}/gardens" } }
end
let(:attributes) do
{
"login-name" => member.login_name,
"slug" => member.slug
"slug" => member.slug
}
end
@@ -83,7 +83,7 @@ RSpec.describe 'Members', type: :request do
it '#update' do
expect do
post "/api/v1/members/#{member.id}", params: {
post "/api/v1/members/#{member.id}", params: {
'member' => { 'login_name' => 'can i modify this' }
},
headers: headers

View File

@@ -6,15 +6,15 @@ RSpec.describe 'Photos', type: :request do
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
let!(:photo) { FactoryBot.create :photo }
let(:photo_encoded_as_json_api) do
{ "id" => photo.id.to_s,
"type" => "photos",
"links" => { "self" => resource_url },
"attributes" => attributes,
{ "id" => photo.id.to_s,
"type" => "photos",
"links" => { "self" => resource_url },
"attributes" => attributes,
"relationships" => {
"owner" => owner_as_json_api,
"owner" => owner_as_json_api,
"plantings" => plantings_as_json_api,
"harvests" => harvests_as_json_api,
"gardens" => gardens_as_json_api
"harvests" => harvests_as_json_api,
"gardens" => gardens_as_json_api
} }
end
@@ -22,25 +22,25 @@ RSpec.describe 'Photos', type: :request do
let(:owner_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/owner",
{ "self" => "#{resource_url}/relationships/owner",
"related" => "#{resource_url}/owner" } }
end
let(:harvests_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/harvests",
{ "self" => "#{resource_url}/relationships/harvests",
"related" => "#{resource_url}/harvests" } }
end
let(:gardens_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/gardens",
{ "self" => "#{resource_url}/relationships/gardens",
"related" => "#{resource_url}/gardens" } }
end
let(:plantings_as_json_api) do
{ "links" =>
{ "self" =>
{ "self" =>
"#{resource_url}/relationships/plantings",
"related" => "#{resource_url}/plantings" } }
end
@@ -48,10 +48,10 @@ RSpec.describe 'Photos', type: :request do
let(:attributes) do
{
"thumbnail-url" => photo.thumbnail_url,
"fullsize-url" => photo.fullsize_url,
"link-url" => photo.link_url,
"license-name" => photo.license_name,
"title" => photo.title
"fullsize-url" => photo.fullsize_url,
"link-url" => photo.link_url,
"license-name" => photo.license_name,
"title" => photo.title
}
end

View File

@@ -6,15 +6,15 @@ RSpec.describe 'Plantings', type: :request do
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
let!(:planting) { FactoryBot.create :planting }
let(:planting_encoded_as_json_api) do
{ "id" => planting.id.to_s,
"type" => "plantings",
"links" => { "self" => resource_url },
"attributes" => attributes,
{ "id" => planting.id.to_s,
"type" => "plantings",
"links" => { "self" => resource_url },
"attributes" => attributes,
"relationships" => {
"garden" => garden_as_json_api,
"crop" => crop_as_json_api,
"owner" => owner_as_json_api,
"photos" => photos_as_json_api,
"garden" => garden_as_json_api,
"crop" => crop_as_json_api,
"owner" => owner_as_json_api,
"photos" => photos_as_json_api,
"harvests" => harvests_as_json_api
} }
end
@@ -23,55 +23,55 @@ RSpec.describe 'Plantings', type: :request do
let(:harvests_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/harvests",
{ "self" => "#{resource_url}/relationships/harvests",
"related" => "#{resource_url}/harvests" } }
end
let(:photos_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/photos",
{ "self" => "#{resource_url}/relationships/photos",
"related" => "#{resource_url}/photos" } }
end
let(:owner_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/owner",
{ "self" => "#{resource_url}/relationships/owner",
"related" => "#{resource_url}/owner" } }
end
let(:crop_as_json_api) do
{ "links" =>
{ "self" =>
{ "self" =>
"#{resource_url}/relationships/crop",
"related" => "#{resource_url}/crop" } }
end
let(:garden_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/garden",
{ "self" => "#{resource_url}/relationships/garden",
"related" => "#{resource_url}/garden" } }
end
let(:attributes) do
{
"slug" => planting.slug,
"planted-at" => "2014-07-30",
"finished-at" => nil,
"finished" => false,
"quantity" => 33,
"description" => planting.description,
"crop-name" => planting.crop.name,
"crop-slug" => planting.crop.slug,
"sunniness" => nil,
"planted-from" => nil,
"expected-lifespan" => nil,
"slug" => planting.slug,
"planted-at" => "2014-07-30",
"finished-at" => nil,
"finished" => false,
"quantity" => 33,
"description" => planting.description,
"crop-name" => planting.crop.name,
"crop-slug" => planting.crop.slug,
"sunniness" => nil,
"planted-from" => nil,
"expected-lifespan" => nil,
"finish-predicted-at" => nil,
"percentage-grown" => nil,
"first-harvest-date" => nil,
"last-harvest-date" => nil,
"thumbnail" => nil,
"location" => planting.garden.location,
"longitude" => planting.garden.longitude,
"latitude" => planting.garden.latitude
"percentage-grown" => nil,
"first-harvest-date" => nil,
"last-harvest-date" => nil,
"thumbnail" => nil,
"location" => planting.garden.location,
"longitude" => planting.garden.longitude,
"latitude" => planting.garden.latitude
}
end

View File

@@ -6,13 +6,13 @@ RSpec.describe 'Photos', type: :request do
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
let!(:seed) { FactoryBot.create :seed }
let(:seed_encoded_as_json_api) do
{ "id" => seed.id.to_s,
"type" => "seeds",
"links" => { "self" => resource_url },
"attributes" => attributes,
{ "id" => seed.id.to_s,
"type" => "seeds",
"links" => { "self" => resource_url },
"attributes" => attributes,
"relationships" => {
"owner" => owner_as_json_api,
"crop" => crop_as_json_api
"crop" => crop_as_json_api
} }
end
@@ -20,27 +20,27 @@ RSpec.describe 'Photos', type: :request do
let(:owner_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/owner",
{ "self" => "#{resource_url}/relationships/owner",
"related" => "#{resource_url}/owner" } }
end
let(:crop_as_json_api) do
{ "links" =>
{ "self" => "#{resource_url}/relationships/crop",
{ "self" => "#{resource_url}/relationships/crop",
"related" => "#{resource_url}/crop" } }
end
let(:attributes) do
{
"description" => seed.description,
"quantity" => seed.quantity,
"plant-before" => "2013-07-15",
"tradable-to" => seed.tradable_to,
"description" => seed.description,
"quantity" => seed.quantity,
"plant-before" => "2013-07-15",
"tradable-to" => seed.tradable_to,
"days-until-maturity-min" => seed.days_until_maturity_min,
"days-until-maturity-max" => seed.days_until_maturity_max,
"organic" => seed.organic,
"gmo" => seed.gmo,
"heirloom" => seed.heirloom
"organic" => seed.organic,
"gmo" => seed.gmo,
"heirloom" => seed.heirloom
}
end

View File

@@ -15,11 +15,11 @@ RSpec.configure do |config|
config.swagger_docs = {
'v1/swagger.yaml' => {
openapi: '3.0.1',
info: {
title: 'API V1',
info: {
title: 'API V1',
version: 'v1'
},
paths: {}
paths: {}
}
}

View File

@@ -3,7 +3,7 @@ require 'rails_helper'
describe "admin/roles/edit" do
before do
@role = assign(:role, stub_model(Role,
name: "MyString",
name: "MyString",
description: "MyText"))
end

View File

@@ -5,10 +5,10 @@ describe "admin/roles/index" do
controller.stub(:current_user) { nil }
assign(:roles, [
stub_model(Role,
name: "Name",
name: "Name",
description: "MyText"),
stub_model(Role,
name: "Name",
name: "Name",
description: "MyText")
])
end

View File

@@ -3,7 +3,7 @@ require 'rails_helper'
describe "admin/roles/new" do
before do
assign(:role, stub_model(Role,
name: "MyString",
name: "MyString",
description: "MyText").as_new_record)
end

View File

@@ -5,7 +5,7 @@ describe "crops/_grown_for" do
let(:plant_path) { FactoryBot.create(:plant_part) }
let!(:harvest) do
FactoryBot.create(:harvest,
crop: crop,
crop: crop,
plant_part: plant_path)
end

View File

@@ -3,9 +3,9 @@ require 'rails_helper'
describe "forums/edit" do
before do
@forum = assign(:forum, stub_model(Forum,
name: "MyString",
name: "MyString",
description: "MyText",
owner_id: 1))
owner_id: 1))
end
it "renders the edit forum form" do

View File

@@ -10,7 +10,7 @@ describe "harvests/edit" do
assert_select "form", action: harvests_path, method: "post" do
assert_select "input#crop", class: "ui-autocomplete-input"
assert_select "input#harvest_crop_id", name: "harvest[crop_id]"
assert_select 'input', id: "harvest_plant_part_id_#{PlantPart.first.id}",
assert_select 'input', id: "harvest_plant_part_id_#{PlantPart.first.id}",
name: "harvest[plant_part_id]"
assert_select "input#harvest_quantity", name: "harvest[quantity]"
assert_select "input#harvest_weight_quantity", name: "harvest[quantity]"

View File

@@ -13,12 +13,12 @@ describe "harvests/index" do
harvests = WillPaginate::Collection.create(page, per_page, total_entries) do |pager|
pager.replace([
FactoryBot.create(:harvest,
crop: @tomato,
crop: @tomato,
owner: @member),
FactoryBot.create(:harvest,
crop: @maize,
crop: @maize,
plant_part: @pp,
owner: @member)
owner: @member)
])
end
assign(:harvests, harvests)

View File

@@ -13,13 +13,13 @@ describe 'harvests/index.rss.haml' do
harvests = WillPaginate::Collection.create(page, per_page, total_entries) do |pager|
pager.replace([
FactoryBot.create(:harvest,
crop: @tomato,
crop: @tomato,
owner: @member),
FactoryBot.create(:harvest,
crop: @maize,
crop: @maize,
plant_part: @pp,
owner: @member,
quantity: 2)
owner: @member,
quantity: 2)
])
end
assign(:harvests, harvests)

View File

@@ -10,7 +10,7 @@ describe "harvests/new" do
assert_select "form", action: harvests_path, method: "post" do
assert_select "input#crop", class: "ui-autocomplete-input"
assert_select "input#harvest_crop_id", name: "harvest[crop_id]"
assert_select 'input', id: "harvest_plant_part_id_#{PlantPart.first.id}",
assert_select 'input', id: "harvest_plant_part_id_#{PlantPart.first.id}",
name: "harvest[plant_part_id]"
# some browsers interpret <input type="number"> without a step as "integer"
assert_select "input#harvest_quantity[step=any]", name: "harvest[quantity]"

View File

@@ -3,9 +3,9 @@ require 'rails_helper'
describe "photos/edit" do
before do
@photo = assign(:photo, stub_model(Photo,
owner_id: 1,
owner_id: 1,
flickr_photo_id: 1,
thumbnail_url: "MyString",
fullsize_url: "MyString"))
thumbnail_url: "MyString",
fullsize_url: "MyString"))
end
end

View File

@@ -9,9 +9,9 @@ describe "plantings/_form" do
@crop = @lowercase # needed to render the form
@planting = FactoryBot.create(:planting,
garden: @garden,
crop: @crop,
owner: @member,
garden: @garden,
crop: @crop,
owner: @member,
planted_at: Date.new(2013, 3, 1))
@gardens = @member.gardens

View File

@@ -4,7 +4,7 @@ describe "plantings/edit" do
before do
@member = FactoryBot.create(:member,
login_name: 'right',
email: 'right@example.com')
email: 'right@example.com')
# creating two crops to make sure that the correct one is selected
# in the form.

View File

@@ -15,21 +15,21 @@ describe "plantings/index" do
pager.replace([
FactoryBot.create(:planting,
garden: garden,
crop: tomato,
owner: member),
crop: tomato,
owner: member),
FactoryBot.create(:planting,
garden: garden,
crop: maize,
owner: garden.owner,
garden: garden,
crop: maize,
owner: garden.owner,
description: '',
planted_at: Time.zone.local(2013, 1, 13)),
planted_at: Time.zone.local(2013, 1, 13)),
FactoryBot.create(:planting,
garden: garden,
owner: garden.owner,
crop: tomato,
planted_at: Time.zone.local(2013, 1, 13),
garden: garden,
owner: garden.owner,
crop: tomato,
planted_at: Time.zone.local(2013, 1, 13),
finished_at: Time.zone.local(2013, 1, 20),
finished: true)
finished: true)
])
end
assign(:plantings, plantings)

View File

@@ -32,7 +32,7 @@ describe "posts/edit" do
before do
@forum = assign(:forum, FactoryBot.create(:forum))
assign(:post, FactoryBot.create(:post,
forum: @forum,
forum: @forum,
author: @author))
render
end