mirror of
https://github.com/Growstuff/growstuff.git
synced 2025-12-24 10:07:47 -05:00
rubocop fixes
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
module PredictPlanting
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do # rubocop:disable Metrics/BlockLength
|
||||
included do
|
||||
## Triggers
|
||||
before_save :calculate_lifespan
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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|
|
||||
|
||||
@@ -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" }
|
||||
|
||||
#
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,2 @@
|
||||
# Require any additional compass plugins here.
|
||||
# rubocop:disable Lint/UselessAssignment
|
||||
project_type = :rails
|
||||
# rubocop:enable Lint/UselessAssignment
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
})
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
34
db/seeds.rb
34
db/seeds.rb
@@ -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!
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require 'bluecloth'
|
||||
|
||||
module Haml::Filters # rubocop:disable Style/ClassAndModuleChildren
|
||||
module Haml::Filters
|
||||
module GrowstuffMarkdown
|
||||
include Haml::Filters::Base
|
||||
|
||||
|
||||
@@ -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) }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -5,9 +5,9 @@ describe ForumsController do
|
||||
|
||||
def valid_attributes
|
||||
{
|
||||
"name" => "MyString",
|
||||
"name" => "MyString",
|
||||
"description" => "Something",
|
||||
"owner_id" => 1
|
||||
"owner_id" => 1
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) }
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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: {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user