Compare commits

..

153 Commits

Author SHA1 Message Date
Daniel O'Connor
b76cfd3957 Rubocop: RSpec/IncludeExamples 2026-04-23 13:31:16 +00:00
Daniel O'Connor
ea5f93f929 Merge pull request #4541 from Growstuff/Lint/EmptyBlock
Rubocop: Lint/EmptyBlock
2026-04-23 22:53:40 +09:30
Daniel O'Connor
8d8ee7069c Merge pull request #4540 from Growstuff/Bundler/OrderedGems
Rubocop: Bundler/OrderedGems
2026-04-23 22:46:10 +09:30
Daniel O'Connor
5d112e9134 Rubocop: Capybara/RSpec/HaveSelector (#4539)
* Rubocop: Capybara/RSpec/HaveSelector

* Rubocop: Capybara/RSpec/HaveSelector
2026-04-23 22:45:58 +09:30
Daniel O'Connor
6ba4f39b4a Rubocop: Lint/EmptyBlock 2026-04-23 13:14:39 +00:00
Daniel O'Connor
a38d99ed4a Rubocop: Bundler/OrderedGems 2026-04-23 13:07:38 +00:00
Daniel O'Connor
f1acb35520 Merge pull request #4537 from Growstuff/FactoryBot/SyntaxMethods
Rubocop: FactoryBot/SyntaxMethods
2026-04-23 22:29:24 +09:30
Daniel O'Connor
267560aff1 Merge pull request #4494 from Growstuff/dependabot/bundler/puma-8.0.0
Bump puma from 7.2.0 to 8.0.0
2026-04-23 22:26:31 +09:30
dependabot[bot]
e862a5c5b8 Bump puma from 7.2.0 to 8.0.0
Bumps [puma](https://github.com/puma/puma) from 7.2.0 to 8.0.0.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/main/History.md)
- [Commits](https://github.com/puma/puma/compare/v7.2.0...v8.0.0)

---
updated-dependencies:
- dependency-name: puma
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 12:47:21 +00:00
Daniel O'Connor
c0edfb9eed Merge pull request #4536 from Growstuff/Capybara/NegationMatcher
Rubocop: Capybara/NegationMatcher
2026-04-23 22:15:53 +09:30
Daniel O'Connor
a8d0c6e32e Rubocop: Layout/TrailingWhitespace (#4535) 2026-04-23 22:15:42 +09:30
Daniel O'Connor
f381ba29cc Merge pull request #4534 from Growstuff/Layout/HeredocIndentation
Rubocop: Layout/HeredocIndentation
2026-04-23 22:07:41 +09:30
Daniel O'Connor
c1f171b09e Rubocop: Capybara/NegationMatcher 2026-04-23 12:30:06 +00:00
Daniel O'Connor
b9dcd95c00 Rubocop: Layout/TrailingWhitespace 2026-04-23 12:27:06 +00:00
Daniel O'Connor
400db178e4 Merge pull request #4533 from Growstuff/Rails/RedirectBackOrTo
Rubocop: Rails/RedirectBackOrTo
2026-04-23 21:54:19 +09:30
Daniel O'Connor
aecde837cc Merge pull request #4459 from Growstuff/dependabot/github_actions/actions/upload-artifact-7
Bump actions/upload-artifact from 5 to 7
2026-04-23 21:52:13 +09:30
Daniel O'Connor
316351fb1c Merge pull request #4532 from Growstuff/Layout/IndentationWidth
Rubocop: Layout/IndentationWidth
2026-04-23 21:51:15 +09:30
Daniel O'Connor
34ce4e216f Merge pull request #4531 from Growstuff/EmptyLinesAroundClassBody
Rubocop: Layout/EmptyLinesAroundClassBody
2026-04-23 21:49:49 +09:30
Daniel O'Connor
7b8c7f4ff5 Rubocop: Rails/RedirectBackOrTo 2026-04-23 12:15:30 +00:00
Daniel O'Connor
6fe9f7f5d3 Merge pull request #4530 from Growstuff/drop-jshint
Drop jshint
2026-04-23 21:40:46 +09:30
Daniel O'Connor
ae5c125a96 Rubocop: Layout/IndentationWidth 2026-04-23 12:10:09 +00:00
Daniel O'Connor
8a70156b61 Rubocop: Layout/EmptyLinesAroundClassBody 2026-04-23 12:07:56 +00:00
dependabot[bot]
f1fde20500 Bump actions/upload-artifact from 5 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 12:05:35 +00:00
Daniel O'Connor
d32d28c5de Merge branch 'dev' of https://github.com/Growstuff/growstuff into drop-jshint 2026-04-23 11:59:08 +00:00
Daniel O'Connor
ed884c5ac6 Merge pull request #4527 from Growstuff/eslint-10
ESLint 10
2026-04-23 21:26:35 +09:30
Daniel O'Connor
84d61a7596 Merge pull request #4529 from Growstuff/eslint-9
ESLint 9
2026-04-23 21:26:22 +09:30
Daniel O'Connor
181431ce94 Merge pull request #4528 from Growstuff/eslint-8
ESLint 8
2026-04-23 21:26:14 +09:30
Daniel O'Connor
da73548695 Drop jshint 2026-04-23 11:48:07 +00:00
Daniel O'Connor
3e95581c06 Merge pull request #4526 from Growstuff/eslint
Eslint 7
2026-04-23 21:14:09 +09:30
Daniel O'Connor
37ce3d28aa ESLint 10 2026-04-23 11:42:44 +00:00
Daniel O'Connor
b7bf5d932a ESLint 9 2026-04-23 11:41:27 +00:00
Daniel O'Connor
247106d10f ESLint 8 2026-04-23 11:40:03 +00:00
Daniel O'Connor
39534eab02 eslint 7 2026-04-23 11:36:16 +00:00
Daniel O'Connor
076ba9844a Merge pull request #4525 from Growstuff/eslint
Upgrade eslint
2026-04-23 21:00:29 +09:30
Daniel O'Connor
727c754499 Upgrade eslint 2026-04-23 11:23:16 +00:00
Daniel O'Connor
ce17ec1620 Merge pull request #4522 from Growstuff/node-24
Node 24
2026-04-23 20:13:50 +09:30
Daniel O'Connor
9500de3815 Merge pull request #4521 from Growstuff/node-22
Node 22
2026-04-23 20:10:20 +09:30
Daniel O'Connor
d89e284c3a Merge pull request #4516 from Growstuff/upgrade-eslint
Bump eslint
2026-04-23 20:09:46 +09:30
Daniel O'Connor
4e7a719787 Merge pull request #4520 from Growstuff/node-20
Node 20
2026-04-23 20:04:37 +09:30
Daniel O'Connor
40e402d06a Merge pull request #4519 from Growstuff/node-18
Node 18
2026-04-23 20:04:25 +09:30
Daniel O'Connor
5cada51fad Node 24 2026-04-23 10:31:28 +00:00
Daniel O'Connor
b1c1955ed3 Merge branch 'dev' into upgrade-eslint 2026-04-23 19:59:27 +09:30
Daniel O'Connor
4fbdd2a92b Merge pull request #4518 from Growstuff/node-16
Node 16
2026-04-23 19:58:16 +09:30
Daniel O'Connor
3379526be3 Node 22 2026-04-23 10:27:01 +00:00
Daniel O'Connor
6d2a5884cb Node 20 2026-04-23 10:24:31 +00:00
Daniel O'Connor
2971bd61dd Node 18 2026-04-23 10:23:06 +00:00
Daniel O'Connor
3553165ebe Node 16 2026-04-23 10:20:50 +00:00
Daniel O'Connor
410ee0050f Merge branch 'dev' into upgrade-eslint 2026-04-23 19:47:15 +09:30
Daniel O'Connor
6ba21bd280 Merge pull request #4517 from Growstuff/node-14
Node 14
2026-04-23 19:46:54 +09:30
Daniel O'Connor
96d290d3fe Node 14 2026-04-23 10:10:16 +00:00
Daniel O'Connor
a24548defb Bump eslint 2026-04-23 09:59:45 +00:00
Daniel O'Connor
5493ecfc5e Merge pull request #4515 from Growstuff/lodash
Bump jshint
2026-04-23 19:28:01 +09:30
Daniel O'Connor
b21111e4ce Merge pull request #4514 from Growstuff/bump-addressable
Bump addressable
2026-04-23 19:25:27 +09:30
Daniel O'Connor
702ec2c47c Merge pull request #4513 from Growstuff/bump-rack
Bump rack
2026-04-23 19:24:17 +09:30
Daniel O'Connor
742bc12c89 Upgrade jshint 2026-04-23 09:50:54 +00:00
Daniel O'Connor
27b552aa8e Bump addressable 2026-04-23 09:42:43 +00:00
Daniel O'Connor
5cb6d8afba Bump rack 2026-04-23 09:41:56 +00:00
Daniel O'Connor
0729e07e55 Merge pull request #4511 from Growstuff/dependabot/bundler/bullet-8.1.1
Bump bullet from 8.1.0 to 8.1.1
2026-04-23 19:06:41 +09:30
Daniel O'Connor
28997f6053 Merge pull request #4512 from Growstuff/dependabot/bundler/aws-sdk-s3-1.220.0
Bump aws-sdk-s3 from 1.219.0 to 1.220.0
2026-04-23 19:06:31 +09:30
dependabot[bot]
732604d507 Bump aws-sdk-s3 from 1.219.0 to 1.220.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.219.0 to 1.220.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.220.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 07:07:01 +00:00
dependabot[bot]
e461fdd27e Bump bullet from 8.1.0 to 8.1.1
Bumps [bullet](https://github.com/flyerhzm/bullet) from 8.1.0 to 8.1.1.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/8.1.0...8.1.1)

---
updated-dependencies:
- dependency-name: bullet
  dependency-version: 8.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 07:03:51 +00:00
Daniel O'Connor
3b40c28288 Merge pull request #4510 from Growstuff/dependabot/bundler/oj-3.17.0
Bump oj from 3.16.17 to 3.17.0
2026-04-20 17:03:57 +09:30
dependabot[bot]
a50b9dcb2a Bump oj from 3.16.17 to 3.17.0
Bumps [oj](https://github.com/ohler55/oj) from 3.16.17 to 3.17.0.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.16.17...v3.17.0)

---
updated-dependencies:
- dependency-name: oj
  dependency-version: 3.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-20 07:18:18 +00:00
Daniel O'Connor
ea0a5bfad4 Merge pull request #4508 from Growstuff/dependabot/bundler/scout_apm-6.2.0
Bump scout_apm from 6.1.1 to 6.2.0
2026-04-17 22:57:03 +09:30
dependabot[bot]
77e3db1924 Bump scout_apm from 6.1.1 to 6.2.0
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.1.1 to 6.2.0.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.1.1...v6.2.0)

---
updated-dependencies:
- dependency-name: scout_apm
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 07:37:59 +00:00
Daniel O'Connor
34290be6be Merge pull request #4507 from Growstuff/dependabot/bundler/faker-3.8.0
Bump faker from 3.7.1 to 3.8.0
2026-04-17 17:06:30 +09:30
Daniel O'Connor
02e0473faa Merge pull request #4509 from Growstuff/dependabot/bundler/axe-core-rspec-4.11.2
Bump axe-core-rspec from 4.11.1 to 4.11.2
2026-04-17 17:06:14 +09:30
dependabot[bot]
95f7cefe0f Bump axe-core-rspec from 4.11.1 to 4.11.2
Bumps [axe-core-rspec](https://github.com/dequelabs/axe-core-gems) from 4.11.1 to 4.11.2.
- [Release notes](https://github.com/dequelabs/axe-core-gems/releases)
- [Changelog](https://github.com/dequelabs/axe-core-gems/blob/v4.11.2/CHANGELOG.md)
- [Commits](https://github.com/dequelabs/axe-core-gems/compare/v4.11.1...v4.11.2)

---
updated-dependencies:
- dependency-name: axe-core-rspec
  dependency-version: 4.11.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 07:09:39 +00:00
dependabot[bot]
bcf6690a0d Bump faker from 3.7.1 to 3.8.0
Bumps [faker](https://github.com/faker-ruby/faker) from 3.7.1 to 3.8.0.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.7.1...v3.8.0)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 3.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 07:05:21 +00:00
Daniel O'Connor
734aa4795a Merge pull request #4505 from Growstuff/dependabot/bundler/rake-13.4.2
Bump rake from 13.4.1 to 13.4.2
2026-04-16 18:56:07 +09:30
dependabot[bot]
3729016770 Bump rake from 13.4.1 to 13.4.2
Bumps [rake](https://github.com/ruby/rake) from 13.4.1 to 13.4.2.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.4.1...v13.4.2)

---
updated-dependencies:
- dependency-name: rake
  dependency-version: 13.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 07:08:45 +00:00
Daniel O'Connor
a37589cdc6 Merge pull request #4504 from Growstuff/dependabot/bundler/faker-3.7.1
Bump faker from 3.6.1 to 3.7.1
2026-04-15 21:16:41 +09:30
dependabot[bot]
e86e834d94 Bump faker from 3.6.1 to 3.7.1
Bumps [faker](https://github.com/faker-ruby/faker) from 3.6.1 to 3.7.1.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.6.1...v3.7.1)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 3.7.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 09:06:05 +00:00
Daniel O'Connor
c73c435d01 Merge pull request #4500 from Growstuff/dependabot/bundler/timecop-0.9.11
Bump timecop from 0.9.10 to 0.9.11
2026-04-15 18:35:01 +09:30
Daniel O'Connor
0375299ec8 Merge pull request #4499 from Growstuff/dependabot/bundler/oj-3.16.17
Bump oj from 3.16.16 to 3.16.17
2026-04-15 18:34:49 +09:30
Daniel O'Connor
27fe8d58dd Merge pull request #4501 from Growstuff/dependabot/bundler/xmlrpc-0.3.4
Bump xmlrpc from 0.3.3 to 0.3.4
2026-04-15 18:34:36 +09:30
Daniel O'Connor
171792b6fd Merge pull request #4503 from Growstuff/dependabot/bundler/rake-13.4.1
Bump rake from 13.3.1 to 13.4.1
2026-04-15 18:34:23 +09:30
dependabot[bot]
83eae50449 Bump rake from 13.3.1 to 13.4.1
Bumps [rake](https://github.com/ruby/rake) from 13.3.1 to 13.4.1.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.3.1...v13.4.1)

---
updated-dependencies:
- dependency-name: rake
  dependency-version: 13.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 07:03:18 +00:00
dependabot[bot]
bf65e77700 Bump xmlrpc from 0.3.3 to 0.3.4
Bumps [xmlrpc](https://github.com/ruby/xmlrpc) from 0.3.3 to 0.3.4.
- [Release notes](https://github.com/ruby/xmlrpc/releases)
- [Changelog](https://github.com/ruby/xmlrpc/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/xmlrpc/compare/v0.3.3...v0.3.4)

---
updated-dependencies:
- dependency-name: xmlrpc
  dependency-version: 0.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 07:09:10 +00:00
dependabot[bot]
fd3e81a059 Bump timecop from 0.9.10 to 0.9.11
Bumps [timecop](https://github.com/travisjeffery/timecop) from 0.9.10 to 0.9.11.
- [Changelog](https://github.com/travisjeffery/timecop/blob/master/History.md)
- [Commits](https://github.com/travisjeffery/timecop/compare/v0.9.10...v0.9.11)

---
updated-dependencies:
- dependency-name: timecop
  dependency-version: 0.9.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 07:08:25 +00:00
dependabot[bot]
5ffbcd4e63 Bump oj from 3.16.16 to 3.16.17
Bumps [oj](https://github.com/ohler55/oj) from 3.16.16 to 3.16.17.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.16.16...v3.16.17)

---
updated-dependencies:
- dependency-name: oj
  dependency-version: 3.16.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 07:05:35 +00:00
Daniel O'Connor
5d3118f833 Update nutritional data link to new URL 2026-04-11 15:12:18 +09:30
Daniel O'Connor
2073b443fa Merge pull request #4498 from Growstuff/CloCkWeRX-patch-2
Add conditional rendering for harvest thumbnail image
2026-04-11 14:57:57 +09:30
Daniel O'Connor
55934bcc4a Add conditional rendering for harvest thumbnail image 2026-04-11 14:57:36 +09:30
Daniel O'Connor
ba25755fdc Merge pull request #4495 from Growstuff/dependabot/bundler/rubocop-1.86.1
Bump rubocop from 1.86.0 to 1.86.1
2026-04-10 19:47:09 +09:30
dependabot[bot]
7d29724fd8 Bump rubocop from 1.86.0 to 1.86.1
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.86.0 to 1.86.1.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.86.0...v1.86.1)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.86.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 10:16:56 +00:00
Daniel O'Connor
d9c387d4f9 Merge pull request #4496 from Growstuff/dependabot/bundler/selenium-webdriver-4.43.0
Bump selenium-webdriver from 4.41.0 to 4.43.0
2026-04-10 19:46:39 +09:30
Daniel O'Connor
73487456f3 Merge pull request #4497 from Growstuff/dependabot/bundler/recaptcha-5.21.2
Bump recaptcha from 5.21.1 to 5.21.2
2026-04-10 19:45:19 +09:30
dependabot[bot]
342f7edfb1 Bump recaptcha from 5.21.1 to 5.21.2
Bumps [recaptcha](https://github.com/ambethia/recaptcha) from 5.21.1 to 5.21.2.
- [Changelog](https://github.com/ambethia/recaptcha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ambethia/recaptcha/compare/v5.21.1...v5.21.2)

---
updated-dependencies:
- dependency-name: recaptcha
  dependency-version: 5.21.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 07:07:18 +00:00
dependabot[bot]
0a1e8d8036 Bump selenium-webdriver from 4.41.0 to 4.43.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.41.0 to 4.43.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.41.0...selenium-4.43.0)

---
updated-dependencies:
- dependency-name: selenium-webdriver
  dependency-version: 4.43.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 07:05:41 +00:00
Daniel O'Connor
bf588a31ae Merge pull request #4492 from Growstuff/dependabot/bundler/haml_lint-0.73.0
Bump haml_lint from 0.72.0 to 0.73.0
2026-04-08 17:22:45 +09:30
Daniel O'Connor
2761886c7c Merge pull request #4493 from Growstuff/dependabot/bundler/aws-sdk-s3-1.219.0
Bump aws-sdk-s3 from 1.218.0 to 1.219.0
2026-04-08 17:22:26 +09:30
dependabot[bot]
a71e5fa61f Bump aws-sdk-s3 from 1.218.0 to 1.219.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.218.0 to 1.219.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.219.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 07:05:00 +00:00
dependabot[bot]
1eddd89bee Bump haml_lint from 0.72.0 to 0.73.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.72.0 to 0.73.0.
- [Release notes](https://github.com/sds/haml-lint/releases)
- [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sds/haml-lint/compare/v0.72.0...v0.73.0)

---
updated-dependencies:
- dependency-name: haml_lint
  dependency-version: 0.73.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-07 07:06:38 +00:00
Daniel O'Connor
6511c2682b Merge pull request #4491 from Growstuff/dependabot/bundler/active_median-1.0.0
Bump active_median from 0.6.0 to 1.0.0
2026-04-06 19:17:21 +09:30
dependabot[bot]
78b395704f Bump active_median from 0.6.0 to 1.0.0
Bumps [active_median](https://github.com/ankane/active_median) from 0.6.0 to 1.0.0.
- [Changelog](https://github.com/ankane/active_median/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ankane/active_median/compare/v0.6.0...v1.0.0)

---
updated-dependencies:
- dependency-name: active_median
  dependency-version: 1.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-06 07:04:49 +00:00
Daniel O'Connor
9fa9d14616 Merge pull request #4490 from Growstuff/dependabot/bundler/aws-sdk-s3-1.218.0
Bump aws-sdk-s3 from 1.217.0 to 1.218.0
2026-04-04 09:00:24 +10:30
dependabot[bot]
8e42e63359 Bump aws-sdk-s3 from 1.217.0 to 1.218.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.217.0 to 1.218.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.218.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-01 07:26:50 +00:00
Daniel O'Connor
5004ace754 Merge pull request #4420 from Growstuff/dependabot/bundler/byebug-13.0.0
Bump byebug from 12.0.0 to 13.0.0
2026-03-26 18:10:50 +09:30
Daniel O'Connor
b6a2af6e3d Merge pull request #4404 from Growstuff/dependabot/bundler/vcr-6.4.0
Bump vcr from 6.3.1 to 6.4.0
2026-03-26 18:10:39 +09:30
dependabot[bot]
c192814d09 Bump vcr from 6.3.1 to 6.4.0
Bumps [vcr](https://github.com/vcr/vcr) from 6.3.1 to 6.4.0.
- [Release notes](https://github.com/vcr/vcr/releases)
- [Changelog](https://github.com/vcr/vcr/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vcr/vcr/compare/v6.3.1...v6.4.0)

---
updated-dependencies:
- dependency-name: vcr
  dependency-version: 6.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 08:23:21 +00:00
Daniel O'Connor
9ba7d8ba86 Merge pull request #4424 from Growstuff/dependabot/bundler/puma-7.2.0
Bump puma from 7.1.0 to 7.2.0
2026-03-26 17:52:22 +09:30
dependabot[bot]
19fdfc3682 Bump byebug from 12.0.0 to 13.0.0
Bumps [byebug](https://github.com/deivid-rodriguez/byebug) from 12.0.0 to 13.0.0.
- [Release notes](https://github.com/deivid-rodriguez/byebug/releases)
- [Changelog](https://github.com/deivid-rodriguez/byebug/blob/main/CHANGELOG.md)
- [Commits](https://github.com/deivid-rodriguez/byebug/compare/v12.0.0...v13.0.0)

---
updated-dependencies:
- dependency-name: byebug
  dependency-version: 13.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 08:14:25 +00:00
dependabot[bot]
9a15c28782 Bump puma from 7.1.0 to 7.2.0
Bumps [puma](https://github.com/puma/puma) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/main/History.md)
- [Commits](https://github.com/puma/puma/compare/v7.1.0...v7.2.0)

---
updated-dependencies:
- dependency-name: puma
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 08:13:15 +00:00
Daniel O'Connor
aff780a19a Merge pull request #4482 from Growstuff/dependabot/bundler/terser-1.2.7
Bump terser from 1.2.6 to 1.2.7
2026-03-26 17:39:59 +09:30
Daniel O'Connor
2ade7c9226 Merge pull request #4466 from Growstuff/dependabot/bundler/faker-3.6.1
Bump faker from 3.6.0 to 3.6.1
2026-03-26 17:39:11 +09:30
Daniel O'Connor
0431d11c51 Merge pull request #4474 from Growstuff/dependabot/bundler/loofah-2.25.1
Bump loofah from 2.25.0 to 2.25.1
2026-03-26 17:39:05 +09:30
Daniel O'Connor
781c63edd7 Merge pull request #4478 from Growstuff/dependabot/bundler/icalendar-2.12.2
Bump icalendar from 2.12.1 to 2.12.2
2026-03-26 17:38:57 +09:30
Daniel O'Connor
a0590b972d Merge pull request #4484 from Growstuff/dependabot/npm_and_yarn/picomatch-2.3.2
Bump picomatch from 2.3.1 to 2.3.2
2026-03-26 17:38:47 +09:30
dependabot[bot]
06e839a527 Bump picomatch from 2.3.1 to 2.3.2
Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:58:51 +00:00
dependabot[bot]
6de2ad7fe9 Bump faker from 3.6.0 to 3.6.1
Bumps [faker](https://github.com/faker-ruby/faker) from 3.6.0 to 3.6.1.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.6.0...v3.6.1)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 3.6.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:50:38 +00:00
dependabot[bot]
f768dc6c3c Bump loofah from 2.25.0 to 2.25.1
Bumps [loofah](https://github.com/flavorjones/loofah) from 2.25.0 to 2.25.1.
- [Release notes](https://github.com/flavorjones/loofah/releases)
- [Changelog](https://github.com/flavorjones/loofah/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flavorjones/loofah/compare/v2.25.0...v2.25.1)

---
updated-dependencies:
- dependency-name: loofah
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:50:33 +00:00
dependabot[bot]
87a433be8e Bump icalendar from 2.12.1 to 2.12.2
Bumps [icalendar](https://github.com/icalendar/icalendar) from 2.12.1 to 2.12.2.
- [Changelog](https://github.com/icalendar/icalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/icalendar/icalendar/compare/v2.12.1...v2.12.2)

---
updated-dependencies:
- dependency-name: icalendar
  dependency-version: 2.12.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:50:32 +00:00
dependabot[bot]
8bfb013cfb Bump terser from 1.2.6 to 1.2.7
Bumps [terser](https://github.com/ahorek/terser-ruby) from 1.2.6 to 1.2.7.
- [Release notes](https://github.com/ahorek/terser-ruby/releases)
- [Changelog](https://github.com/ahorek/terser-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ahorek/terser-ruby/compare/1.2.6...1.2.7)

---
updated-dependencies:
- dependency-name: terser
  dependency-version: 1.2.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:50:25 +00:00
Daniel O'Connor
79e5ddd8dd Merge pull request #4473 from Growstuff/dependabot/bundler/devise-5.0.3
Bump devise from 5.0.2 to 5.0.3
2026-03-26 17:19:10 +09:30
Daniel O'Connor
6ec37b1d2b Merge pull request #4472 from Growstuff/dependabot/bundler/oj-3.16.16
Bump oj from 3.16.15 to 3.16.16
2026-03-26 17:18:58 +09:30
Daniel O'Connor
56753f2869 Merge pull request #4486 from Growstuff/refactor-signup-spec-10681697950343780211
Refactor existing username signup spec
2026-03-26 17:18:35 +09:30
google-labs-jules[bot]
477812f06b Refactor signup feature spec to use direct database setup
- Rewrote the 'sign up for new account with existing username' test in
  spec/features/signup_spec.rb.
- Replaced UI-driven setup of an existing user with FactoryBot's `create`.
- Replaced UI navigation with a direct call to `new_member_registration_path`.
- Added an explicit assertion for the 'has already been taken' error
  message.
- Ensured a unique email is used for the second signup attempt to isolate
  the username validation check.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-03-26 06:34:32 +00:00
dependabot[bot]
e972cd4d56 Bump devise from 5.0.2 to 5.0.3
Bumps [devise](https://github.com/heartcombo/devise) from 5.0.2 to 5.0.3.
- [Release notes](https://github.com/heartcombo/devise/releases)
- [Changelog](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heartcombo/devise/compare/v5.0.2...v5.0.3)

---
updated-dependencies:
- dependency-name: devise
  dependency-version: 5.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 06:18:55 +00:00
dependabot[bot]
3039ae0dc2 Bump oj from 3.16.15 to 3.16.16
Bumps [oj](https://github.com/ohler55/oj) from 3.16.15 to 3.16.16.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.16.15...v3.16.16)

---
updated-dependencies:
- dependency-name: oj
  dependency-version: 3.16.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 06:18:55 +00:00
Daniel O'Connor
bd1da7cad0 Merge pull request #4475 from Growstuff/dependabot/bundler/aws-sdk-s3-1.217.0
Bump aws-sdk-s3 from 1.213.0 to 1.217.0
2026-03-26 15:47:23 +09:30
dependabot[bot]
38c0dd3a63 Bump aws-sdk-s3 from 1.213.0 to 1.217.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.213.0 to 1.217.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.217.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 05:57:54 +00:00
Daniel O'Connor
5e24ba113f Merge pull request #4485 from Growstuff/flaky-test-admin-forums
Decrease failures by checking for the save message first in admin tests
2026-03-26 15:25:51 +09:30
Daniel O'Connor
f94f5638c8 Decrease failures by checking for the save message first 2026-03-26 05:47:00 +00:00
dependabot[bot]
90c177408d Bump rubocop from 1.85.0 to 1.86.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.85.0 to 1.86.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.85.0...v1.86.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.86.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-24 20:29:42 +13:00
Daniel O'Connor
baca934a70 Merge pull request #4481 from Growstuff/dependabot/bundler/activesupport-7.2.3.1
Bump activesupport from 7.2.3 to 7.2.3.1
2026-03-24 11:53:12 +09:30
dependabot[bot]
397517547e Bump activesupport from 7.2.3 to 7.2.3.1
Bumps [activesupport](https://github.com/rails/rails) from 7.2.3 to 7.2.3.1.
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v8.1.2.1/activesupport/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v7.2.3...v7.2.3.1)

---
updated-dependencies:
- dependency-name: activesupport
  dependency-version: 7.2.3.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-24 02:06:17 +00:00
Daniel O'Connor
07f6bc8b76 Merge pull request #4476 from Growstuff/dependabot/bundler/json-2.19.2
Bump json from 2.19.0 to 2.19.2
2026-03-20 18:37:52 +09:30
dependabot[bot]
8eaca222a0 Bump json from 2.19.0 to 2.19.2
Bumps [json](https://github.com/ruby/json) from 2.19.0 to 2.19.2.
- [Release notes](https://github.com/ruby/json/releases)
- [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md)
- [Commits](https://github.com/ruby/json/compare/v2.19.0...v2.19.2)

---
updated-dependencies:
- dependency-name: json
  dependency-version: 2.19.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 12:57:30 +00:00
Daniel O'Connor
f0afcadc51 Merge pull request #4471 from Growstuff/dependabot/bundler/rspec-rails-8.0.4
Bump rspec-rails from 8.0.3 to 8.0.4
2026-03-13 18:52:54 +10:30
dependabot[bot]
adbf3cc609 Bump rspec-rails from 8.0.3 to 8.0.4
Bumps [rspec-rails](https://github.com/rspec/rspec-rails) from 8.0.3 to 8.0.4.
- [Changelog](https://github.com/rspec/rspec-rails/blob/main/Changelog.md)
- [Commits](https://github.com/rspec/rspec-rails/compare/v8.0.3...v8.0.4)

---
updated-dependencies:
- dependency-name: rspec-rails
  dependency-version: 8.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 07:04:28 +00:00
Daniel O'Connor
152e843ca4 Merge pull request #4465 from Growstuff/dependabot/bundler/haml_lint-0.72.0
Bump haml_lint from 0.71.0 to 0.72.0
2026-03-07 14:07:37 +10:30
dependabot[bot]
21f4349b08 Bump haml_lint from 0.71.0 to 0.72.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.71.0 to 0.72.0.
- [Release notes](https://github.com/sds/haml-lint/releases)
- [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sds/haml-lint/compare/v0.71.0...v0.72.0)

---
updated-dependencies:
- dependency-name: haml_lint
  dependency-version: 0.72.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-07 03:07:58 +00:00
Daniel O'Connor
7d8ed6f681 Merge pull request #4463 from Growstuff/remove-travis
Remove travis
2026-03-07 13:36:35 +10:30
Daniel O'Connor
857fceda55 Merge pull request #4452 from Growstuff/dependabot/bundler/selenium-webdriver-4.41.0
Bump selenium-webdriver from 4.40.0 to 4.41.0
2026-03-01 16:49:47 +10:30
dependabot[bot]
2583470966 Bump selenium-webdriver from 4.40.0 to 4.41.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.40.0 to 4.41.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.40.0...selenium-4.41.0)

---
updated-dependencies:
- dependency-name: selenium-webdriver
  dependency-version: 4.41.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:57:20 +00:00
Daniel O'Connor
14f8f36d4a Merge pull request #4393 from Growstuff/dependabot/github_actions/actions/cache-5
Bump actions/cache from 4 to 5
2026-03-01 16:21:47 +10:30
Daniel O'Connor
65adc7a2f9 Merge pull request #4419 from Growstuff/dependabot/bundler/haml-7.2.0
Bump haml from 7.1.0 to 7.2.0
2026-03-01 16:19:45 +10:30
Daniel O'Connor
1e9fe31e2e Merge pull request #4457 from Growstuff/dependabot/bundler/haml_lint-0.71.0
Bump haml_lint from 0.68.0 to 0.71.0
2026-03-01 16:18:46 +10:30
Daniel O'Connor
3393d6710b Merge pull request #4454 from Growstuff/dependabot/bundler/scout_apm-6.1.1
Bump scout_apm from 6.0.2 to 6.1.1
2026-03-01 16:17:39 +10:30
Daniel O'Connor
5767b62b0f Merge pull request #4425 from Growstuff/dependabot/npm_and_yarn/lodash-4.17.23
Bump lodash from 4.17.21 to 4.17.23
2026-03-01 16:16:27 +10:30
dependabot[bot]
5e0d2b153a Bump scout_apm from 6.0.2 to 6.1.1
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.0.2 to 6.1.1.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.0.2...v6.1.1)

---
updated-dependencies:
- dependency-name: scout_apm
  dependency-version: 6.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:46:24 +00:00
Daniel O'Connor
2c864f2f59 Merge pull request #4426 from Growstuff/dependabot/bundler/faker-3.6.0
Bump faker from 3.5.3 to 3.6.0
2026-03-01 16:15:55 +10:30
Daniel O'Connor
21a23af522 Merge pull request #4432 from Growstuff/dependabot/bundler/aws-sdk-s3-1.213.0
Bump aws-sdk-s3 from 1.212.0 to 1.213.0
2026-03-01 16:15:26 +10:30
Daniel O'Connor
9a4396c7c3 Merge pull request #4455 from Growstuff/dependabot/bundler/dalli-5.0.2
Bump dalli from 5.0.1 to 5.0.2
2026-03-01 16:15:08 +10:30
dependabot[bot]
fc6ee9db36 Bump haml_lint from 0.68.0 to 0.71.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.68.0 to 0.71.0.
- [Release notes](https://github.com/sds/haml-lint/releases)
- [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sds/haml-lint/compare/v0.68.0...v0.71.0)

---
updated-dependencies:
- dependency-name: haml_lint
  dependency-version: 0.71.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:12:01 +00:00
dependabot[bot]
54d8f557e3 Bump dalli from 5.0.1 to 5.0.2
Bumps [dalli](https://github.com/petergoldstein/dalli) from 5.0.1 to 5.0.2.
- [Changelog](https://github.com/petergoldstein/dalli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/petergoldstein/dalli/compare/v5.0.1...v5.0.2)

---
updated-dependencies:
- dependency-name: dalli
  dependency-version: 5.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:11:50 +00:00
Daniel O'Connor
0aa182af14 Remove travis 2026-03-01 05:11:29 +00:00
dependabot[bot]
ccfab85c97 Bump aws-sdk-s3 from 1.212.0 to 1.213.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.212.0 to 1.213.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.213.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-22 22:37:56 +00:00
dependabot[bot]
6442603147 Bump faker from 3.5.3 to 3.6.0
Bumps [faker](https://github.com/faker-ruby/faker) from 3.5.3 to 3.6.0.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.5.3...v3.6.0)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 3.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 00:42:01 +00:00
dependabot[bot]
8c894fdd54 Bump haml from 7.1.0 to 7.2.0
Bumps [haml](https://github.com/haml/haml) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/haml/haml/releases)
- [Changelog](https://github.com/haml/haml/blob/main/CHANGELOG.md)
- [Commits](https://github.com/haml/haml/compare/v7.1.0...v7.2.0)

---
updated-dependencies:
- dependency-name: haml
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 11:59:22 +00:00
dependabot[bot]
905e8a0fe4 Bump lodash from 4.17.21 to 4.17.23
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 23:05:37 +00:00
dependabot[bot]
64c33a5327 Bump actions/cache from 4 to 5
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-12 07:01:50 +00:00
196 changed files with 2403 additions and 2834 deletions

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -103,7 +103,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
@@ -112,7 +112,7 @@ jobs:
- name: Upload screenshots - name: Upload screenshots
if: failure() if: failure()
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: screenshots name: screenshots
path: tmp/screenshots path: tmp/screenshots

View File

@@ -76,7 +76,7 @@ jobs:
id: yarn-cache-dir-path id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)" run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache - name: Setup yarn cache
uses: actions/cache@v4 uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with: with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -91,7 +91,7 @@ jobs:
- name: Install NodeJS - name: Install NodeJS
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '12' node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler - name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1

View File

@@ -6,21 +6,6 @@
# Note that changes in the inspected code, or installation of new # Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again. # versions of RuboCop, may require this file to be generated again.
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation.
Bundler/OrderedGems:
Exclude:
- 'Gemfile'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: have_no, not_to
Capybara/NegationMatcher:
Exclude:
- 'spec/features/admin/reverting_crops_spec.rb'
# Offense count: 19 # Offense count: 19
Capybara/NegationMatcherAfterVisit: Capybara/NegationMatcherAfterVisit:
Exclude: Exclude:
@@ -33,22 +18,6 @@ Capybara/NegationMatcherAfterVisit:
- 'spec/features/members/profile_spec.rb' - 'spec/features/members/profile_spec.rb'
- 'spec/features/plantings/planting_a_crop_spec.rb' - 'spec/features/plantings/planting_a_crop_spec.rb'
# Offense count: 34
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: DefaultSelector.
Capybara/RSpec/HaveSelector:
Exclude:
- 'spec/features/conversations/index_spec.rb'
- 'spec/features/footer_spec.rb'
- 'spec/features/gardens/adding_gardens_spec.rb'
- 'spec/features/harvests/harvesting_a_crop_spec.rb'
- 'spec/features/members/list_spec.rb'
- 'spec/features/plantings/planting_a_crop_spec.rb'
- 'spec/features/seeds/adding_seeds_spec.rb'
- 'spec/features/shared_examples/crop_suggest.rb'
- 'spec/support/feature_helpers.rb'
- 'spec/views/posts/show.html.haml_spec.rb'
# Offense count: 14 # Offense count: 14
Capybara/SpecificMatcher: Capybara/SpecificMatcher:
Exclude: Exclude:
@@ -94,19 +63,6 @@ FactoryBot/ExcessiveCreateList:
- 'spec/features/crops/show_spec.rb' - 'spec/features/crops/show_spec.rb'
- 'spec/features/percy/percy_spec.rb' - 'spec/features/percy/percy_spec.rb'
# Offense count: 1158
# This cop supports unsafe autocorrection (--autocorrect-all).
FactoryBot/SyntaxMethods:
Enabled: false
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only
Layout/EmptyLinesAroundClassBody:
Exclude:
- 'db/migrate/20251130035700_create_versions.rb'
# Offense count: 312 # Offense count: 312
# This cop supports safe autocorrection (--autocorrect). # This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. # Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
@@ -125,25 +81,6 @@ Layout/HashAlignment:
- 'spec/requests/api/v1/activities_request_spec.rb' - 'spec/requests/api/v1/activities_request_spec.rb'
- 'spec/requests/api/v1/members_request_spec.rb' - 'spec/requests/api/v1/members_request_spec.rb'
# Offense count: 7
# This cop supports safe autocorrection (--autocorrect).
Layout/HeredocIndentation:
Exclude:
- 'db/migrate/20190712003735_add_like_counter_caches.rb'
- 'db/migrate/20191226024813_crop_harvest_counter_cache.rb'
- 'db/migrate/20191226024957_crop_photo_counter_cache.rb'
- 'db/migrate/20191226025124_plant_part_harvest_counter_cache.rb'
- 'db/migrate/20191226025225_post_comment_counter_cache.rb'
- 'db/migrate/20250824085224_add_photos_comment_count.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: Width, EnforcedStyleAlignWith, AllowedPatterns.
# SupportedStylesAlignWith: start_of_line, relative_to_receiver
Layout/IndentationWidth:
Exclude:
- 'spec/requests/api/v1/activities_request_spec.rb'
# Offense count: 6 # Offense count: 6
# This cop supports safe autocorrection (--autocorrect). # This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings. # Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings.
@@ -157,14 +94,6 @@ Layout/LineLength:
- 'db/seeds.rb' - 'db/seeds.rb'
- 'spec/requests/api/v1/activities_request_spec.rb' - 'spec/requests/api/v1/activities_request_spec.rb'
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowInHeredoc.
Layout/TrailingWhitespace:
Exclude:
- 'Gemfile'
- 'app/helpers/crops_helper.rb'
# Offense count: 1 # Offense count: 1
# This cop supports safe autocorrection (--autocorrect). # This cop supports safe autocorrection (--autocorrect).
Lint/AmbiguousOperatorPrecedence: Lint/AmbiguousOperatorPrecedence:
@@ -207,18 +136,6 @@ Lint/DuplicateMethods:
Exclude: Exclude:
- 'app/models/planting.rb' - 'app/models/planting.rb'
# Offense count: 8
# Configuration parameters: AllowComments, AllowEmptyLambdas.
Lint/EmptyBlock:
Exclude:
- 'db/migrate/20171022032108_all_the_predictions.rb'
- 'spec/controllers/home_controller_spec.rb'
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/controllers/plant_parts_controller_spec.rb'
- 'spec/factories/crop_companions.rb'
- 'spec/features/crops/crop_detail_page_spec.rb'
- 'spec/requests/authentications_spec.rb'
# Offense count: 1 # Offense count: 1
# This cop supports safe autocorrection (--autocorrect). # This cop supports safe autocorrection (--autocorrect).
Lint/RedundantCopDisableDirective: Lint/RedundantCopDisableDirective:
@@ -417,26 +334,6 @@ RSpec/HooksBeforeExamples:
Exclude: Exclude:
- 'spec/features/crops/creating_a_crop_spec.rb' - 'spec/features/crops/creating_a_crop_spec.rb'
# Offense count: 53
# This cop supports unsafe autocorrection (--autocorrect-all).
RSpec/IncludeExamples:
Exclude:
- 'spec/features/conversations/index_spec.rb'
- 'spec/features/crops/alternate_name_spec.rb'
- 'spec/features/crops/browse_crops_spec.rb'
- 'spec/features/crops/creating_a_crop_spec.rb'
- 'spec/features/crops/crop_photos_spec.rb'
- 'spec/features/crops/delete_crop_spec.rb'
- 'spec/features/gardens/actions_spec.rb'
- 'spec/features/gardens/adding_gardens_spec.rb'
- 'spec/features/gardens/index_spec.rb'
- 'spec/features/likeable_spec.rb'
- 'spec/features/signout_spec.rb'
- 'spec/models/crop_spec.rb'
- 'spec/support/feature_helpers.rb'
- 'spec/views/photos/show.html.haml_spec.rb'
- 'spec/views/seeds/index.rss.haml_spec.rb'
# Offense count: 37 # Offense count: 37
# Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns. # Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns.
RSpec/IndexedLet: RSpec/IndexedLet:
@@ -692,12 +589,6 @@ Rails/RakeEnvironment:
- 'lib/tasks/i18n.rake' - 'lib/tasks/i18n.rake'
- 'lib/tasks/testing.rake' - 'lib/tasks/testing.rake'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Rails/RedirectBackOrTo:
Exclude:
- 'app/controllers/follows_controller.rb'
# Offense count: 9 # Offense count: 9
# This cop supports unsafe autocorrection (--autocorrect-all). # This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedReceivers. # Configuration parameters: AllowedReceivers.

View File

@@ -1,31 +0,0 @@
sudo: required
language: ruby
dist: bionic
branches:
only:
- mainline
- dev
cache:
bundler: true
yarn: true
directories:
- tmp/cache/assets/test/sprockets
env:
global:
- secure: "Z5TpM2jEX4UCvNePnk/LwltQX48U2u9BRc+Iypr1x9QW2o228QJhPIOH39a8RMUrepGnkQIq9q3ZRUn98RfrJz1yThtlNFL3NmzdQ57gKgjGwfpa0e4Dwj/ZJqV2D84tDGjvdVYLP7zzaYZxQcwk/cgNpzKf/jq97HLNP7CYuf4="
before_deploy:
- bundle exec script/heroku_maintenance.rb on
deploy:
provider: heroku
api_key:
secure: "WrQxf0fEKkCdXrjcejurobOnNNz3he4dDwjBbToXbQTQNDObPp7NetJrLsfM8FiUFEeOuvhIHHiDQtMvY720zGGAGxDptvgFS+0QHCUqoTRZA/yFfUmHlG2jROXTzk5uVK0AE4k6Ion5kX8+mM0EnMT/7u+MTFiukrJctSiEXfg="
on:
repo: Growstuff/growstuff
app:
dev: growstuff-staging
mainline: growstuff-prod
run:
- "script/deploy-tasks.sh"
- restart
after_deploy:
- bundle exec script/heroku_maintenance.rb off

View File

@@ -139,7 +139,7 @@ gem "msgpack"
# Pinned due to RAILS_ENV=production bundle exec rake assets:precompile failing with ArgumentError: wrong number of arguments (given 1, expected 0) (ArgumentError) # Pinned due to RAILS_ENV=production bundle exec rake assets:precompile failing with ArgumentError: wrong number of arguments (given 1, expected 0) (ArgumentError)
# /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/connection_pool-3.0.2/lib/connection_pool.rb:48:in `initialize' # /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/connection_pool-3.0.2/lib/connection_pool.rb:48:in `initialize'
# /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.3/lib/active_support/cache/mem_cache_store.rb:63:in `new' # /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.3/lib/active_support/cache/mem_cache_store.rb:63:in `new'
gem "connection_pool", "< 3" gem "connection_pool", "< 3"
group :production do group :production do
gem 'bonsai-elasticsearch-rails' # Integration with Bonsa-Elasticsearch on heroku gem 'bonsai-elasticsearch-rails' # Integration with Bonsa-Elasticsearch on heroku
@@ -200,13 +200,9 @@ group :test do
gem 'vcr' gem 'vcr'
end end
group :travis do
gem 'platform-api'
end
gem "i18n_data", "~> 1.1" gem "i18n_data", "~> 1.1"
gem "paper_trail", "~> 17.0" gem "paper_trail", "~> 17.0"
gem 'sitemap_generator'
gem 'aws-sdk-s3', '~> 1', '>= 1.114.0' gem 'aws-sdk-s3', '~> 1', '>= 1.114.0'
gem 'sitemap_generator'

View File

@@ -33,29 +33,29 @@ GEM
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (7.2.3) actioncable (7.2.3.1)
actionpack (= 7.2.3) actionpack (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6) zeitwerk (~> 2.6)
actionmailbox (7.2.3) actionmailbox (7.2.3.1)
actionpack (= 7.2.3) actionpack (= 7.2.3.1)
activejob (= 7.2.3) activejob (= 7.2.3.1)
activerecord (= 7.2.3) activerecord (= 7.2.3.1)
activestorage (= 7.2.3) activestorage (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
mail (>= 2.8.0) mail (>= 2.8.0)
actionmailer (7.2.3) actionmailer (7.2.3.1)
actionpack (= 7.2.3) actionpack (= 7.2.3.1)
actionview (= 7.2.3) actionview (= 7.2.3.1)
activejob (= 7.2.3) activejob (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
mail (>= 2.8.0) mail (>= 2.8.0)
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
actionpack (7.2.3) actionpack (7.2.3.1)
actionview (= 7.2.3) actionview (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
cgi cgi
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
racc racc
@@ -65,15 +65,15 @@ GEM
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6) rails-html-sanitizer (~> 1.6)
useragent (~> 0.16) useragent (~> 0.16)
actiontext (7.2.3) actiontext (7.2.3.1)
actionpack (= 7.2.3) actionpack (= 7.2.3.1)
activerecord (= 7.2.3) activerecord (= 7.2.3.1)
activestorage (= 7.2.3) activestorage (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
globalid (>= 0.6.0) globalid (>= 0.6.0)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (7.2.3) actionview (7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
builder (~> 3.1) builder (~> 3.1)
cgi cgi
erubi (~> 1.11) erubi (~> 1.11)
@@ -82,29 +82,29 @@ GEM
active_link_to (1.0.5) active_link_to (1.0.5)
actionpack actionpack
addressable addressable
active_median (0.6.0) active_median (1.0.0)
activesupport (>= 7.1) activesupport (>= 7.2)
active_record_union (1.4.0) active_record_union (1.4.0)
activerecord (>= 6.0) activerecord (>= 6.0)
active_utils (3.6.0) active_utils (3.6.0)
activesupport (>= 4.2) activesupport (>= 4.2)
i18n i18n
activejob (7.2.3) activejob (7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (7.2.3) activemodel (7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
activerecord (7.2.3) activerecord (7.2.3.1)
activemodel (= 7.2.3) activemodel (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
timeout (>= 0.4.0) timeout (>= 0.4.0)
activestorage (7.2.3) activestorage (7.2.3.1)
actionpack (= 7.2.3) actionpack (= 7.2.3.1)
activejob (= 7.2.3) activejob (= 7.2.3.1)
activerecord (= 7.2.3) activerecord (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
marcel (~> 1.0) marcel (~> 1.0)
activesupport (7.2.3) activesupport (7.2.3.1)
base64 base64
benchmark (>= 0.3) benchmark (>= 0.3)
bigdecimal bigdecimal
@@ -113,17 +113,17 @@ GEM
drb drb
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
logger (>= 1.4.2) logger (>= 1.4.2)
minitest (>= 5.1) minitest (>= 5.1, < 6)
securerandom (>= 0.3) securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5) tzinfo (~> 2.0, >= 2.0.5)
addressable (2.8.8) addressable (2.9.0)
public_suffix (>= 2.0.2, < 8.0) public_suffix (>= 2.0.2, < 8.0)
ast (2.4.3) ast (2.4.3)
autoprefixer-rails (10.4.16.0) autoprefixer-rails (10.4.16.0)
execjs (~> 2) execjs (~> 2)
aws-eventstream (1.4.0) aws-eventstream (1.4.0)
aws-partitions (1.1206.0) aws-partitions (1.1240.0)
aws-sdk-core (3.241.4) aws-sdk-core (3.245.0)
aws-eventstream (~> 1, >= 1.3.0) aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0) aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9) aws-sigv4 (~> 1.9)
@@ -131,24 +131,24 @@ GEM
bigdecimal bigdecimal
jmespath (~> 1, >= 1.6.1) jmespath (~> 1, >= 1.6.1)
logger logger
aws-sdk-kms (1.121.0) aws-sdk-kms (1.123.0)
aws-sdk-core (~> 3, >= 3.241.4) aws-sdk-core (~> 3, >= 3.244.0)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.212.0) aws-sdk-s3 (1.220.0)
aws-sdk-core (~> 3, >= 3.241.4) aws-sdk-core (~> 3, >= 3.244.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1) aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
axe-core-api (4.11.1) axe-core-api (4.11.2)
dumb_delegator dumb_delegator
ostruct ostruct
virtus virtus
axe-core-capybara (4.11.1) axe-core-capybara (4.11.2)
axe-core-api (= 4.11.1) axe-core-api (= 4.11.2)
dumb_delegator dumb_delegator
axe-core-rspec (4.11.1) axe-core-rspec (4.11.2)
axe-core-api (= 4.11.1) axe-core-api (= 4.11.2)
dumb_delegator dumb_delegator
ostruct ostruct
virtus virtus
@@ -157,13 +157,13 @@ GEM
ice_nine (~> 0.11.0) ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1) thread_safe (~> 0.3, >= 0.3.1)
base64 (0.3.0) base64 (0.3.0)
bcrypt (3.1.21) bcrypt (3.1.22)
benchmark (0.5.0) benchmark (0.5.0)
better_errors (2.10.1) better_errors (2.10.1)
erubi (>= 1.0.0) erubi (>= 1.0.0)
rack (>= 0.9.0) rack (>= 0.9.0)
rouge (>= 1.0.0) rouge (>= 1.0.0)
bigdecimal (3.3.1) bigdecimal (4.1.2)
bluecloth (2.2.0) bluecloth (2.2.0)
bonsai-elasticsearch-rails (7.0.1) bonsai-elasticsearch-rails (7.0.1)
elasticsearch-model (< 8) elasticsearch-model (< 8)
@@ -177,10 +177,11 @@ GEM
actionpack (>= 6.1) actionpack (>= 6.1)
activemodel (>= 6.1) activemodel (>= 6.1)
builder (3.3.0) builder (3.3.0)
bullet (8.1.0) bullet (8.1.1)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
uniform_notifier (~> 1.11) uniform_notifier (~> 1.11)
byebug (12.0.0) byebug (13.0.0)
reline (>= 0.6.0)
cancancan (3.6.1) cancancan (3.6.1)
capybara (3.40.0) capybara (3.40.0)
addressable addressable
@@ -235,7 +236,7 @@ GEM
csv_shaper (1.4.0) csv_shaper (1.4.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
csv csv
dalli (5.0.1) dalli (5.0.2)
logger logger
database_cleaner (2.1.0) database_cleaner (2.1.0)
database_cleaner-active_record (>= 2, < 3) database_cleaner-active_record (>= 2, < 3)
@@ -246,7 +247,7 @@ GEM
date (3.5.1) date (3.5.1)
descendants_tracker (0.0.4) descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1) thread_safe (~> 0.3, >= 0.3.1)
devise (5.0.2) devise (5.0.3)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
railties (>= 7.0) railties (>= 7.0)
@@ -275,18 +276,15 @@ GEM
elasticsearch-transport (7.0.0) elasticsearch-transport (7.0.0)
faraday faraday
multi_json multi_json
erb (6.0.1) erb (6.0.2)
erubi (1.13.1) erubi (1.13.1)
erubis (2.7.0)
excon (1.3.2)
logger
execjs (2.10.0) execjs (2.10.0)
factory_bot (6.5.5) factory_bot (6.5.5)
activesupport (>= 6.1.0) activesupport (>= 6.1.0)
factory_bot_rails (6.5.1) factory_bot_rails (6.5.1)
factory_bot (~> 6.5) factory_bot (~> 6.5)
railties (>= 6.1.0) railties (>= 6.1.0)
faker (3.5.3) faker (3.8.0)
i18n (>= 1.8.11, < 2) i18n (>= 1.8.11, < 2)
faraday (2.14.1) faraday (2.14.1)
faraday-net_http (>= 2.0, < 3.5) faraday-net_http (>= 2.0, < 3.5)
@@ -315,7 +313,7 @@ GEM
gravatar-ultimate (2.0.0) gravatar-ultimate (2.0.0)
activesupport (>= 2.3.14) activesupport (>= 2.3.14)
rack rack
haml (7.1.0) haml (7.2.0)
temple (>= 0.8.2) temple (>= 0.8.2)
thor thor
tilt tilt
@@ -324,21 +322,14 @@ GEM
activesupport (>= 5.1) activesupport (>= 5.1)
haml (>= 4.0.6) haml (>= 4.0.6)
railties (>= 5.1) railties (>= 5.1)
haml_lint (0.68.0) haml_lint (0.73.0)
haml (>= 5.0) haml (>= 5.0)
parallel (~> 1.10) parallel (>= 1.10)
rainbow rainbow
rubocop (>= 1.0) rubocop (>= 1.0)
sysexits (~> 1.1) sysexits (~> 1.1)
hashie (5.1.0) hashie (5.1.0)
logger logger
heroics (0.1.3)
base64
erubis (~> 2.0)
excon
moneta
multi_json (>= 1.9.2)
webrick
highline (3.1.2) highline (3.1.2)
reline reline
http-accept (1.7.0) http-accept (1.7.0)
@@ -364,7 +355,7 @@ GEM
terminal-table (>= 1.5.1) terminal-table (>= 1.5.1)
i18n_data (1.1.0) i18n_data (1.1.0)
simple_po_parser (~> 1.1) simple_po_parser (~> 1.1)
icalendar (2.12.1) icalendar (2.12.2)
base64 base64
ice_cube (~> 0.16) ice_cube (~> 0.16)
logger logger
@@ -385,10 +376,10 @@ GEM
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0) railties (>= 4.2.0)
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
json (2.18.1) json (2.19.3)
json-schema (6.0.0) json-schema (6.2.0)
addressable (~> 2.8) addressable (~> 2.8)
bigdecimal (~> 3.1) bigdecimal (>= 3.1, < 5)
jsonapi-resources (0.10.7) jsonapi-resources (0.10.7)
activerecord (>= 4.1) activerecord (>= 4.1)
concurrent-ruby concurrent-ruby
@@ -413,7 +404,7 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3) rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10) rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0) logger (1.7.0)
loofah (2.25.0) loofah (2.25.1)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.12.0) nokogiri (>= 1.12.0)
mail (2.9.0) mail (2.9.0)
@@ -432,8 +423,6 @@ GEM
material_icons (4.0.0) material_icons (4.0.0)
railties (>= 3.2) railties (>= 3.2)
matrix (0.4.3) matrix (0.4.3)
mcp (0.7.1)
json-schema (>= 4.1)
memcachier (0.0.2) memcachier (0.0.2)
method_source (1.1.0) method_source (1.1.0)
mime-types (3.7.0) mime-types (3.7.0)
@@ -446,9 +435,7 @@ GEM
mini_magick (4.12.0) mini_magick (4.12.0)
mini_mime (1.1.5) mini_mime (1.1.5)
mini_portile2 (2.8.9) mini_portile2 (2.8.9)
minitest (6.0.1) minitest (5.27.0)
prism (~> 1.5)
moneta (1.0.0)
msgpack (1.8.0) msgpack (1.8.0)
multi_json (1.19.1) multi_json (1.19.1)
multi_xml (0.8.1) multi_xml (0.8.1)
@@ -466,13 +453,13 @@ GEM
net-protocol net-protocol
netrc (0.11.0) netrc (0.11.0)
nio4r (2.7.5) nio4r (2.7.5)
nokogiri (1.19.1) nokogiri (1.19.2)
mini_portile2 (~> 2.8.2) mini_portile2 (~> 2.8.2)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.19.1-x86_64-linux-gnu) nokogiri (1.19.2-x86_64-linux-gnu)
racc (~> 1.4) racc (~> 1.4)
oauth (0.5.6) oauth (0.5.6)
oj (3.16.15) oj (3.17.0)
bigdecimal (>= 3.0) bigdecimal (>= 3.0)
ostruct (>= 0.2) ostruct (>= 0.2)
omniauth (1.9.2) omniauth (1.9.2)
@@ -490,18 +477,14 @@ GEM
paper_trail (17.0.0) paper_trail (17.0.0)
activerecord (>= 7.1) activerecord (>= 7.1)
request_store (~> 1.4) request_store (~> 1.4)
parallel (1.27.0) parallel (2.0.1)
parser (3.3.10.2) parser (3.3.11.1)
ast (~> 2.4.1) ast (~> 2.4.1)
racc racc
percy-capybara (5.0.0) percy-capybara (5.0.0)
capybara (>= 3) capybara (>= 3)
pg (1.6.3) pg (1.6.3)
pg (1.6.3-x86_64-linux) pg (1.6.3-x86_64-linux)
platform-api (3.9.0)
heroics (~> 0.1.1)
moneta (~> 1.0.0)
rate_throttle_client (~> 0.1.0)
popper_js (2.11.8) popper_js (2.11.8)
pp (0.6.3) pp (0.6.3)
prettyprint prettyprint
@@ -514,12 +497,12 @@ GEM
psych (5.3.1) psych (5.3.1)
date date
stringio stringio
public_suffix (7.0.2) public_suffix (7.0.5)
puma (7.1.0) puma (8.0.0)
nio4r (~> 2.0) nio4r (~> 2.0)
query_diet (0.7.3) query_diet (0.7.3)
racc (1.8.1) racc (1.8.1)
rack (2.2.22) rack (2.2.23)
rack-cors (2.0.2) rack-cors (2.0.2)
rack (>= 2.0.0) rack (>= 2.0.0)
rack-protection (3.2.0) rack-protection (3.2.0)
@@ -532,20 +515,20 @@ GEM
rackup (1.0.1) rackup (1.0.1)
rack (< 3) rack (< 3)
webrick webrick
rails (7.2.3) rails (7.2.3.1)
actioncable (= 7.2.3) actioncable (= 7.2.3.1)
actionmailbox (= 7.2.3) actionmailbox (= 7.2.3.1)
actionmailer (= 7.2.3) actionmailer (= 7.2.3.1)
actionpack (= 7.2.3) actionpack (= 7.2.3.1)
actiontext (= 7.2.3) actiontext (= 7.2.3.1)
actionview (= 7.2.3) actionview (= 7.2.3.1)
activejob (= 7.2.3) activejob (= 7.2.3.1)
activemodel (= 7.2.3) activemodel (= 7.2.3.1)
activerecord (= 7.2.3) activerecord (= 7.2.3.1)
activestorage (= 7.2.3) activestorage (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
bundler (>= 1.15.0) bundler (>= 1.15.0)
railties (= 7.2.3) railties (= 7.2.3.1)
rails-controller-testing (1.0.5) rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1) actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1)
@@ -554,8 +537,8 @@ GEM
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
minitest minitest
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.6.2) rails-html-sanitizer (1.7.0)
loofah (~> 2.21) loofah (~> 2.25)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
rails-i18n (7.0.10) rails-i18n (7.0.10)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
@@ -565,9 +548,9 @@ GEM
rails_stdout_logging rails_stdout_logging
rails_serve_static_assets (0.0.5) rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5) rails_stdout_logging (0.0.5)
railties (7.2.3) railties (7.2.3.1)
actionpack (= 7.2.3) actionpack (= 7.2.3.1)
activesupport (= 7.2.3) activesupport (= 7.2.3.1)
cgi cgi
irb (~> 1.13) irb (~> 1.13)
rackup (>= 1.0.0) rackup (>= 1.0.0)
@@ -577,8 +560,7 @@ GEM
zeitwerk (~> 2.6) zeitwerk (~> 2.6)
rainbow (3.1.1) rainbow (3.1.1)
raindrops (0.20.1) raindrops (0.20.1)
rake (13.3.1) rake (13.4.2)
rate_throttle_client (0.1.2)
rb-fsevent (0.11.2) rb-fsevent (0.11.2)
rb-inotify (0.11.1) rb-inotify (0.11.1)
ffi (~> 1.0) ffi (~> 1.0)
@@ -586,10 +568,10 @@ GEM
erb erb
psych (>= 4.0.0) psych (>= 4.0.0)
tsort tsort
recaptcha (5.21.1) recaptcha (5.21.2)
redis-client (0.26.2) redis-client (0.26.2)
connection_pool connection_pool
regexp_parser (2.11.3) regexp_parser (2.12.0)
reline (0.6.3) reline (0.6.3)
io-console (~> 0.5) io-console (~> 0.5)
request_store (1.7.0) request_store (1.7.0)
@@ -617,17 +599,17 @@ GEM
rspec-expectations (3.13.5) rspec-expectations (3.13.5)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0) rspec-support (~> 3.13.0)
rspec-mocks (3.13.7) rspec-mocks (3.13.8)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0) rspec-support (~> 3.13.0)
rspec-rails (8.0.3) rspec-rails (8.0.4)
actionpack (>= 7.2) actionpack (>= 7.2)
activesupport (>= 7.2) activesupport (>= 7.2)
railties (>= 7.2) railties (>= 7.2)
rspec-core (~> 3.13) rspec-core (>= 3.13.0, < 5.0.0)
rspec-expectations (~> 3.13) rspec-expectations (>= 3.13.0, < 5.0.0)
rspec-mocks (~> 3.13) rspec-mocks (>= 3.13.0, < 5.0.0)
rspec-support (~> 3.13) rspec-support (>= 3.13.0, < 5.0.0)
rspec-rebound (0.2.1) rspec-rebound (0.2.1)
rspec-core (~> 3.3) rspec-core (~> 3.3)
rspec-support (3.13.7) rspec-support (3.13.7)
@@ -646,19 +628,18 @@ GEM
rswag-ui (2.17.0) rswag-ui (2.17.0)
actionpack (>= 5.2, < 8.2) actionpack (>= 5.2, < 8.2)
railties (>= 5.2, < 8.2) railties (>= 5.2, < 8.2)
rubocop (1.85.0) rubocop (1.86.1)
json (~> 2.3) json (~> 2.3)
language_server-protocol (~> 3.17.0.2) language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0) lint_roller (~> 1.1.0)
mcp (~> 0.6) parallel (>= 1.10)
parallel (~> 1.10)
parser (>= 3.3.0.2) parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0) regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.49.0, < 2.0) rubocop-ast (>= 1.49.0, < 2.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0) unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.49.0) rubocop-ast (1.49.1)
parser (>= 3.3.7.2) parser (>= 3.3.7.2)
prism (~> 1.7) prism (~> 1.7)
rubocop-capybara (2.22.1) rubocop-capybara (2.22.1)
@@ -701,13 +682,13 @@ GEM
sprockets (> 3.0) sprockets (> 3.0)
sprockets-rails sprockets-rails
tilt tilt
scout_apm (6.0.2) scout_apm (6.2.0)
parser parser
searchkick (5.3.1) searchkick (5.3.1)
activemodel (>= 6.1) activemodel (>= 6.1)
hashie hashie
securerandom (0.4.1) securerandom (0.4.1)
selenium-webdriver (4.40.0) selenium-webdriver (4.43.0)
base64 (~> 0.2) base64 (~> 0.2)
logger (~> 1.4) logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5) rexml (~> 3.2, >= 3.2.5)
@@ -736,12 +717,12 @@ GEM
temple (0.10.4) temple (0.10.4)
terminal-table (4.0.0) terminal-table (4.0.0)
unicode-display_width (>= 1.1.1, < 4) unicode-display_width (>= 1.1.1, < 4)
terser (1.2.6) terser (1.2.7)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
thor (1.5.0) thor (1.5.0)
thread_safe (0.3.6) thread_safe (0.3.6)
tilt (2.6.1) tilt (2.7.0)
timecop (0.9.10) timecop (0.9.11)
timeout (0.5.0) timeout (0.5.0)
tsort (0.2.0) tsort (0.2.0)
tzinfo (2.0.6) tzinfo (2.0.6)
@@ -758,8 +739,7 @@ GEM
validate_url (1.0.15) validate_url (1.0.15)
activemodel (>= 3.0.0) activemodel (>= 3.0.0)
public_suffix public_suffix
vcr (6.3.1) vcr (6.4.0)
base64
virtus (2.0.0) virtus (2.0.0)
axiom-types (~> 0.1) axiom-types (~> 0.1)
coercible (~> 1.0) coercible (~> 1.0)
@@ -779,7 +759,8 @@ GEM
will_paginate (4.0.1) will_paginate (4.0.1)
will_paginate-bootstrap-style (0.3.0) will_paginate-bootstrap-style (0.3.0)
will_paginate (~> 4.0, >= 4.0.0) will_paginate (~> 4.0, >= 4.0.0)
xmlrpc (0.3.3) xmlrpc (0.3.4)
rexml
webrick webrick
xpath (3.2.0) xpath (3.2.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)
@@ -857,7 +838,6 @@ DEPENDENCIES
paper_trail (~> 17.0) paper_trail (~> 17.0)
percy-capybara (~> 5.0.0) percy-capybara (~> 5.0.0)
pg pg
platform-api
pry pry
puma puma
query_diet query_diet

View File

@@ -17,7 +17,7 @@ class FollowsController < ApplicationController
else else
flash[:error] = "Already following or error while following." flash[:error] = "Already following or error while following."
end end
redirect_back fallback_location: root_path redirect_back_or_to(root_path)
end end
def destroy def destroy

View File

@@ -62,7 +62,7 @@ module CropsHelper
'@type': 'Person', '@type': 'Person',
name: post.author.login_name name: post.author.login_name
}, },
'datePublished': post.created_at 'datePublished': post.created_at
} }
end end

View File

@@ -35,4 +35,4 @@
%th Sodium %th Sodium
%td= "#{data.sodium_na_mg.to_f.round(1)} mg" %td= "#{data.sodium_na_mg.to_f.round(1)} mg"
.card-footer .card-footer
= link_to "See more", "https://afcd.foodstandards.gov.au/fooddetails.aspx?PFKID=#{data.public_food_key}", target: "_blank", rel: "noopener noreferrer" = link_to "See more", "https://www.foodstandards.gov.au/science-data/food-nutrient-databases/afcd/search/food/#{data.public_food_key}", target: "_blank", rel: "noopener noreferrer"

View File

@@ -9,4 +9,5 @@
%small.text-muted %small.text-muted
harvested by #{harvest.owner_login_name} harvested by #{harvest.owner_login_name}
%p.mb-2 %p.mb-2
= image_tag harvest.thumbnail_url, width: 75, class: 'rounded shadow', alt: "Image of #{harvest.crop_name} by #{harvest.owner}" - if harvest.thumbnail_url
= image_tag harvest.thumbnail_url, width: 75, class: 'rounded shadow', alt: "Image of #{harvest.crop_name} by #{harvest.owner}"

View File

@@ -18,7 +18,6 @@ class AllThePredictions < ActiveRecord::Migration[4.2]
remove_column :plantings, :days_before_maturity, :integer remove_column :plantings, :days_before_maturity, :integer
create_table :median_functions do |t| create_table :median_functions
end
end end
end end

View File

@@ -14,23 +14,23 @@ class AddLikeCounterCaches < ActiveRecord::Migration[5.2]
end end
def data def data
execute <<-SQL.squish execute <<~SQL.squish
UPDATE photos UPDATE photos
SET likes_count = ( SET likes_count = (
SELECT count(1) SELECT count(1)
FROM likes FROM likes
WHERE likes.likeable_id = photos.id WHERE likes.likeable_id = photos.id
AND likeable_type = 'Photo' AND likeable_type = 'Photo'
) )
SQL SQL
execute <<-SQL.squish execute <<~SQL.squish
UPDATE posts UPDATE posts
SET likes_count = ( SET likes_count = (
SELECT count(1) SELECT count(1)
FROM likes FROM likes
WHERE likes.likeable_id = posts.id WHERE likes.likeable_id = posts.id
AND likeable_type = 'Post' AND likeable_type = 'Post'
) )
SQL SQL
end end
end end

View File

@@ -11,13 +11,13 @@ class CropHarvestCounterCache < ActiveRecord::Migration[5.2]
end end
def set_counter_value def set_counter_value
execute <<-SQL.squish execute <<~SQL.squish
UPDATE crops UPDATE crops
SET harvests_count = ( SET harvests_count = (
SELECT count(1) SELECT count(1)
FROM harvests FROM harvests
WHERE harvests.crop_id = crops.id WHERE harvests.crop_id = crops.id
) )
SQL SQL
end end
end end

View File

@@ -11,13 +11,13 @@ class CropPhotoCounterCache < ActiveRecord::Migration[5.2]
end end
def set_counter_value def set_counter_value
execute <<-SQL.squish execute <<~SQL.squish
UPDATE crops UPDATE crops
SET photo_associations_count = ( SET photo_associations_count = (
SELECT count(1) SELECT count(1)
FROM photo_associations FROM photo_associations
WHERE photo_associations.crop_id = crops.id WHERE photo_associations.crop_id = crops.id
) )
SQL SQL
end end
end end

View File

@@ -11,13 +11,13 @@ class PlantPartHarvestCounterCache < ActiveRecord::Migration[5.2]
end end
def set_counter_value def set_counter_value
execute <<-SQL.squish execute <<~SQL.squish
UPDATE plant_parts UPDATE plant_parts
SET harvests_count = ( SET harvests_count = (
SELECT count(1) SELECT count(1)
FROM harvests FROM harvests
WHERE harvests.plant_part_id = plant_parts.id WHERE harvests.plant_part_id = plant_parts.id
) )
SQL SQL
end end
end end

View File

@@ -11,7 +11,7 @@ class PostCommentCounterCache < ActiveRecord::Migration[5.2]
end end
def set_counter_value def set_counter_value
execute <<-SQL.squish execute <<~SQL.squish
UPDATE posts UPDATE posts
SET comments_count = ( SET comments_count = (
SELECT count(1) SELECT count(1)

View File

@@ -11,7 +11,7 @@ class AddPhotosCommentCount < ActiveRecord::Migration[7.2]
end end
def set_counter_value def set_counter_value
execute <<-SQL.squish execute <<~SQL.squish
UPDATE photos UPDATE photos
SET comments_count = ( SET comments_count = (
SELECT count(1) SELECT count(1)

View File

@@ -1,7 +1,6 @@
# This migration creates the `versions` table for the Version class. # This migration creates the `versions` table for the Version class.
# All other migrations PT provides are optional. # All other migrations PT provides are optional.
class CreateVersions < ActiveRecord::Migration[7.2] class CreateVersions < ActiveRecord::Migration[7.2]
# The largest text column available in all supported RDBMS is # The largest text column available in all supported RDBMS is
# 1024^3 - 1 bytes, roughly one gibibyte. We specify a size # 1024^3 - 1 bytes, roughly one gibibyte. We specify a size
# so that MySQL will use `longtext` instead of `text`. Otherwise, # so that MySQL will use `longtext` instead of `text`. Otherwise,

View File

@@ -14,9 +14,8 @@
"@coffeelint/cli": "^3.0.0", "@coffeelint/cli": "^3.0.0",
"@percy/cli": "^1.0.0-beta.76", "@percy/cli": "^1.0.0-beta.76",
"csslint": "^1.0.5", "csslint": "^1.0.5",
"eslint": "^5.0.0", "eslint": "^10.0.0",
"eslint-config-google": "^0.9.1", "eslint-config-google": "^0.9.1"
"jshint": "^2.9.4"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@@ -14,7 +14,7 @@ describe AdminController do
end end
describe 'assigns @members' do describe 'assigns @members' do
let!(:m) { FactoryBot.create(:newsletter_recipient_member) } let!(:m) { create(:newsletter_recipient_member) }
it { expect(assigns(:members)).to eq [m] } it { expect(assigns(:members)).to eq [m] }
end end

View File

@@ -5,14 +5,14 @@ require 'rails_helper'
RSpec.describe Api::V1::PlantingsController, type: :controller do RSpec.describe Api::V1::PlantingsController, type: :controller do
subject { JSON.parse response.body } subject { JSON.parse response.body }
let!(:member) { FactoryBot.create(:member) } let!(:member) { create(:member) }
describe '#index' do describe '#index' do
let(:matching_planting) { subject['data'].select { |planting| planting['id'] == my_planting.id.to_s }.first } let(:matching_planting) { subject['data'].select { |planting| planting['id'] == my_planting.id.to_s }.first }
describe 'GET #index' do describe 'GET #index' do
context 'basic planting' do context 'basic planting' do
let!(:my_planting) { FactoryBot.create(:planting, owner: member, planted_at: '2000-01-01') } let!(:my_planting) { create(:planting, owner: member, planted_at: '2000-01-01') }
let(:expected_attributes) do let(:expected_attributes) do
{ {
'crop-name' => my_planting.crop.name, 'crop-name' => my_planting.crop.name,
@@ -46,7 +46,7 @@ RSpec.describe Api::V1::PlantingsController, type: :controller do
end end
context 'with photo' do context 'with photo' do
let!(:my_planting) { FactoryBot.create(:planting, owner: member, planted_at: '2000-01-01') } let!(:my_planting) { create(:planting, owner: member, planted_at: '2000-01-01') }
let(:expected_attributes) do let(:expected_attributes) do
{ {
@@ -72,7 +72,7 @@ RSpec.describe Api::V1::PlantingsController, type: :controller do
'thumbnail' => photo.thumbnail_url 'thumbnail' => photo.thumbnail_url
} }
end end
let(:photo) { FactoryBot.create(:photo, owner: my_planting.owner) } let(:photo) { create(:photo, owner: my_planting.owner) }
before do before do
my_planting.photos << photo my_planting.photos << photo

View File

@@ -4,10 +4,10 @@ require 'rails_helper'
describe AuthenticationsController do describe AuthenticationsController do
before do before do
@member = FactoryBot.create(:member) @member = create(:member)
sign_in @member sign_in @member
controller.stub(:current_member) { @member } controller.stub(:current_member) { @member }
@auth = FactoryBot.create(:authentication, member: @member) @auth = create(:authentication, member: @member)
request.env['omniauth.auth'] = { request.env['omniauth.auth'] = {
'provider' => 'foo', 'provider' => 'foo',
'uid' => 'bar', 'uid' => 'bar',

View File

@@ -4,7 +4,7 @@ require 'rails_helper'
describe Charts::CropsController do describe Charts::CropsController do
describe 'GET charts' do describe 'GET charts' do
let(:crop) { FactoryBot.create(:crop) } let(:crop) { create(:crop) }
describe 'sunniness' do describe 'sunniness' do
before { get :sunniness, params: { crop_slug: crop.to_param } } before { get :sunniness, params: { crop_slug: crop.to_param } }

View File

@@ -5,7 +5,7 @@ require 'rails_helper'
describe Charts::GardensController do describe Charts::GardensController do
include Devise::Test::ControllerHelpers include Devise::Test::ControllerHelpers
let(:garden) { FactoryBot.create(:garden) } let(:garden) { create(:garden) }
context "when not signed in" do context "when not signed in" do
describe 'GET timeline' do describe 'GET timeline' do
@@ -18,7 +18,7 @@ describe Charts::GardensController do
context "when signed in" do context "when signed in" do
before { sign_in member } before { sign_in member }
let!(:member) { FactoryBot.create(:member) } let!(:member) { create(:member) }
describe 'GET timeline' do describe 'GET timeline' do
before { get :timeline, params: { garden_slug: garden.to_param } } before { get :timeline, params: { garden_slug: garden.to_param } }

View File

@@ -5,7 +5,7 @@ require 'rails_helper'
describe CommentsController do describe CommentsController do
subject { response } subject { response }
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
before do before do
sign_in member sign_in member
@@ -13,13 +13,13 @@ describe CommentsController do
end end
def valid_attributes def valid_attributes
@post = FactoryBot.create(:post) @post = create(:post)
{ post_id: @post.id, body: "some text" } { post_id: @post.id, body: "some text" }
end end
describe "GET RSS feed" do describe "GET RSS feed" do
let!(:first_comment) { FactoryBot.create(:comment, created_at: 10.days.ago) } let!(:first_comment) { create(:comment, created_at: 10.days.ago) }
let!(:last_comment) { FactoryBot.create(:comment, created_at: 4.minutes.ago) } let!(:last_comment) { create(:comment, created_at: 4.minutes.ago) }
describe "returns an RSS feed" do describe "returns an RSS feed" do
before { get :index, format: "rss" } before { get :index, format: "rss" }
@@ -32,7 +32,7 @@ describe CommentsController do
end end
describe "GET new" do describe "GET new" do
let(:post) { FactoryBot.create(:post) } let(:post) { create(:post) }
describe "with valid params" do describe "with valid params" do
before do before do
@@ -41,7 +41,7 @@ describe CommentsController do
} }
end end
let(:old_comment) { FactoryBot.create(:comment, commentable: post) } let(:old_comment) { create(:comment, commentable: post) }
it "picks up post from params" do it "picks up post from params" do
expect(assigns(:commentable)).to eq(post) expect(assigns(:commentable)).to eq(post)
@@ -59,13 +59,13 @@ describe CommentsController do
end end
describe "GET edit" do describe "GET edit" do
let(:post) { FactoryBot.create(:post) } let(:post) { create(:post) }
before { get :edit, params: { id: comment.to_param } } before { get :edit, params: { id: comment.to_param } }
describe "my comment" do describe "my comment" do
let!(:comment) { FactoryBot.create(:comment, author: member, commentable: post) } let!(:comment) { create(:comment, author: member, commentable: post) }
let!(:old_comment) { FactoryBot.create(:comment, commentable: post, created_at: Time.zone.yesterday) } let!(:old_comment) { create(:comment, commentable: post, created_at: Time.zone.yesterday) }
it "assigns previous comments as @comments" do it "assigns previous comments as @comments" do
expect(assigns(:comments)).to eq([comment, old_comment]) expect(assigns(:comments)).to eq([comment, old_comment])
@@ -73,7 +73,7 @@ describe CommentsController do
end end
describe "not my comment" do describe "not my comment" do
let(:comment) { FactoryBot.create(:comment, commentable: post) } let(:comment) { create(:comment, commentable: post) }
it { expect(response).not_to be_successful } it { expect(response).not_to be_successful }
end end
@@ -83,7 +83,7 @@ describe CommentsController do
before { put :update, params: { id: comment.to_param, comment: valid_attributes } } before { put :update, params: { id: comment.to_param, comment: valid_attributes } }
describe "my comment" do describe "my comment" do
let(:comment) { FactoryBot.create(:comment, author: member) } let(:comment) { create(:comment, author: member) }
it "redirects to the comment's post" do it "redirects to the comment's post" do
expect(response).to redirect_to(comment.commentable) expect(response).to redirect_to(comment.commentable)
@@ -91,16 +91,16 @@ describe CommentsController do
end end
describe "not my comment" do describe "not my comment" do
let(:comment) { FactoryBot.create(:comment) } let(:comment) { create(:comment) }
it { expect(response).not_to be_successful } it { expect(response).not_to be_successful }
end end
describe "attempting to change post_id" do describe "attempting to change post_id" do
let(:post) { FactoryBot.create(:post, subject: 'our post') } let(:post) { create(:post, subject: 'our post') }
let(:other_post) { FactoryBot.create(:post, subject: 'the other post') } let(:other_post) { create(:post, subject: 'the other post') }
let(:valid_attributes) { { commentable_type: "Post", commentable_id: other_post.id, body: "kōrero" } } let(:valid_attributes) { { commentable_type: "Post", commentable_id: other_post.id, body: "kōrero" } }
let(:comment) { FactoryBot.create(:comment, author: member, commentable: post) } let(:comment) { create(:comment, author: member, commentable: post) }
it "does not change post_id" do it "does not change post_id" do
comment.reload comment.reload
@@ -113,7 +113,7 @@ describe CommentsController do
before { delete :destroy, params: { id: comment.to_param } } before { delete :destroy, params: { id: comment.to_param } }
describe "my comment" do describe "my comment" do
let(:comment) { FactoryBot.create(:comment, author: member) } let(:comment) { create(:comment, author: member) }
it "redirects to the post the comment was on" do it "redirects to the post the comment was on" do
expect(response).to redirect_to(comment.commentable) expect(response).to redirect_to(comment.commentable)
@@ -121,7 +121,7 @@ describe CommentsController do
end end
describe "not my comment" do describe "not my comment" do
let(:comment) { FactoryBot.create(:comment) } let(:comment) { create(:comment) }
it { expect(response).not_to be_successful } it { expect(response).not_to be_successful }
end end

View File

@@ -42,8 +42,8 @@ describe CropsController do
describe "GET crop search" do describe "GET crop search" do
describe 'fetches the crop search page' do describe 'fetches the crop search page' do
let!(:tomato) { FactoryBot.create(:tomato) } let!(:tomato) { create(:tomato) }
let!(:maize) { FactoryBot.create(:maize) } let!(:maize) { create(:maize) }
before { Crop.reindex } before { Crop.reindex }
@@ -140,7 +140,7 @@ describe CropsController do
describe 'DELETE destroy' do describe 'DELETE destroy' do
subject { delete :destroy, params: { slug: crop.to_param } } subject { delete :destroy, params: { slug: crop.to_param } }
let!(:crop) { FactoryBot.create(:crop) } let!(:crop) { create(:crop) }
context 'not logged in' do context 'not logged in' do
it { expect { subject }.not_to change(Crop, :count) } it { expect { subject }.not_to change(Crop, :count) }

View File

@@ -6,7 +6,7 @@ RSpec.describe GardenTypesController, type: :controller do
include Devise::Test::ControllerHelpers include Devise::Test::ControllerHelpers
let(:valid_params) { { name: 'My second GardenType' } } let(:valid_params) { { name: 'My second GardenType' } }
let(:garden_type) { FactoryBot.create(:garden_type) } let(:garden_type) { create(:garden_type) }
context "when not signed in" do context "when not signed in" do
describe 'GET new' do describe 'GET new' do
@@ -54,7 +54,7 @@ RSpec.describe GardenTypesController, type: :controller do
context "when signed in as a member" do context "when signed in as a member" do
before { sign_in member } before { sign_in member }
let!(:member) { FactoryBot.create(:member) } let!(:member) { create(:member) }
describe "for any garden_type" do describe "for any garden_type" do
let(:any_garden_type) { double('garden_type') } let(:any_garden_type) { double('garden_type') }

View File

@@ -7,7 +7,7 @@ RSpec.describe GardensController, type: :controller do
let(:valid_params) { { name: 'My second Garden' } } let(:valid_params) { { name: 'My second Garden' } }
let(:garden) { FactoryBot.create(:garden) } let(:garden) { create(:garden) }
context "when not signed in" do context "when not signed in" do
describe 'GET new' do describe 'GET new' do
@@ -55,7 +55,7 @@ RSpec.describe GardensController, type: :controller do
context "when signed in" do context "when signed in" do
before { sign_in member } before { sign_in member }
let!(:member) { FactoryBot.create(:member) } let!(:member) { create(:member) }
describe "for another member's garden" do describe "for another member's garden" do
let(:not_my_garden) { double('garden') } let(:not_my_garden) { double('garden') }

View File

@@ -8,19 +8,19 @@ describe HarvestsController, :search do
def valid_attributes def valid_attributes
{ {
owner_id: subject.current_member.id, owner_id: subject.current_member.id,
crop_id: FactoryBot.create(:crop).id, crop_id: create(:crop).id,
plant_part_id: FactoryBot.create(:plant_part).id, plant_part_id: create(:plant_part).id,
harvested_at: '2017-01-01' harvested_at: '2017-01-01'
} }
end end
describe "GET index" do describe "GET index" do
let!(:member1) { FactoryBot.create(:member) } let!(:member1) { create(:member) }
let(:member2) { FactoryBot.create(:member) } let(:member2) { create(:member) }
let(:tomato) { FactoryBot.create(:tomato) } let(:tomato) { create(:tomato) }
let(:maize) { FactoryBot.create(:maize) } let(:maize) { create(:maize) }
let!(:harvest1) { FactoryBot.create(:harvest, owner_id: member1.id, crop_id: tomato.id) } let!(:harvest1) { create(:harvest, owner_id: member1.id, crop_id: tomato.id) }
let!(:harvest2) { FactoryBot.create(:harvest, owner_id: member2.id, crop_id: maize.id) } let!(:harvest2) { create(:harvest, owner_id: member2.id, crop_id: maize.id) }
before { Harvest.reindex } before { Harvest.reindex }
@@ -109,7 +109,7 @@ describe HarvestsController, :search do
end end
describe "links to planting" do describe "links to planting" do
let(:planting) { FactoryBot.create(:planting, owner_id: member.id, garden: member.gardens.first) } let(:planting) { create(:planting, owner_id: member.id, garden: member.gardens.first) }
before { post :create, params: { harvest: valid_attributes.merge(planting_id: planting.id) } } before { post :create, params: { harvest: valid_attributes.merge(planting_id: planting.id) } }
@@ -134,8 +134,8 @@ describe HarvestsController, :search do
end end
describe "not my planting" do describe "not my planting" do
let(:not_my_planting) { FactoryBot.create(:planting) } let(:not_my_planting) { create(:planting) }
let(:harvest) { FactoryBot.create(:harvest) } let(:harvest) { create(:harvest) }
describe "does not save planting_id" do describe "does not save planting_id" do
before do before do
@@ -153,7 +153,7 @@ describe HarvestsController, :search do
let(:harvest) { Harvest.create! valid_attributes } let(:harvest) { Harvest.create! valid_attributes }
it "updates the requested harvest" do it "updates the requested harvest" do
new_crop = FactoryBot.create(:crop) new_crop = create(:crop)
expect do expect do
put :update, params: { slug: harvest.to_param, harvest: { crop_id: new_crop.id } } put :update, params: { slug: harvest.to_param, harvest: { crop_id: new_crop.id } }
harvest.reload harvest.reload
@@ -190,8 +190,8 @@ describe HarvestsController, :search do
end end
describe "not my planting" do describe "not my planting" do
let(:not_my_planting) { FactoryBot.create(:planting) } let(:not_my_planting) { create(:planting) }
let(:harvest) { FactoryBot.create(:harvest) } let(:harvest) { create(:harvest) }
describe "does not save planting_id" do describe "does not save planting_id" do
before do before do

View File

@@ -1,8 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
describe HomeController do
describe "GET index" do
end
end

View File

@@ -3,9 +3,9 @@
require 'rails_helper' require 'rails_helper'
describe LikesController do describe LikesController do
let(:like) { FactoryBot.create(:like, member:) } let(:like) { create(:like, member:) }
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
let(:blogpost) { FactoryBot.create(:post) } let(:blogpost) { create(:post) }
before { sign_in member } before { sign_in member }
@@ -21,9 +21,6 @@ describe LikesController do
describe "Liking someone else's post" do describe "Liking someone else's post" do
it { expect(response.code).to eq('201') } it { expect(response.code).to eq('201') }
end end
describe "Liking your own post" do
end
end end
describe "DELETE destroy" do describe "DELETE destroy" do
@@ -37,7 +34,7 @@ describe LikesController do
end end
describe "Deleting someone else's like" do describe "Deleting someone else's like" do
let(:like) { FactoryBot.create(:like) } let(:like) { create(:like) }
it { expect(response.code).to eq('403') } it { expect(response.code).to eq('403') }
it { JSON.parse(response.body)["error"] == "Unable to like" } it { JSON.parse(response.body)["error"] == "Unable to like" }

View File

@@ -4,8 +4,8 @@ require 'rails_helper'
describe MembersController do describe MembersController do
before do before do
@member = FactoryBot.create(:member) @member = create(:member)
@flickr_auth = FactoryBot.create(:flickr_authentication, member: @member) @flickr_auth = create(:flickr_authentication, member: @member)
end end
describe "GET index" do describe "GET index" do
@@ -39,7 +39,7 @@ describe MembersController do
end end
it "doesn't show unconfirmed members" do it "doesn't show unconfirmed members" do
@member2 = FactoryBot.create(:unconfirmed_member) @member2 = create(:unconfirmed_member)
get :show, params: { slug: @member2.id } get :show, params: { slug: @member2.id }
expect(response).to have_http_status(:not_found) expect(response).to have_http_status(:not_found)
end end

View File

@@ -17,8 +17,8 @@ describe PhotoAssociationsController do
before { photo.harvests << harvest } before { photo.harvests << harvest }
describe "my harvest my photo" do describe "my harvest my photo" do
let(:harvest) { FactoryBot.create(:harvest, owner: member) } let(:harvest) { create(:harvest, owner: member) }
let(:photo) { FactoryBot.create(:photo, owner: member) } let(:photo) { create(:photo, owner: member) }
it "removes link" do it "removes link" do
expect { delete :destroy, params: valid_params }.to change { photo.harvests.count }.by(-1) expect { delete :destroy, params: valid_params }.to change { photo.harvests.count }.by(-1)
@@ -26,8 +26,8 @@ describe PhotoAssociationsController do
end end
describe "another member's harvest from another member's photo" do describe "another member's harvest from another member's photo" do
let(:harvest) { FactoryBot.create(:harvest, owner: photo.owner) } let(:harvest) { create(:harvest, owner: photo.owner) }
let(:photo) { FactoryBot.create(:photo) } let(:photo) { create(:photo) }
it do it do
expect do expect do

View File

@@ -7,7 +7,7 @@ describe PhotosController, :search do
describe 'GET index' do describe 'GET index' do
describe 'all photos' do describe 'all photos' do
let!(:photo) { FactoryBot.create(:photo, :reindex) } let!(:photo) { create(:photo, :reindex) }
before do before do
Photo.reindex Photo.reindex
@@ -21,10 +21,10 @@ describe PhotosController, :search do
end end
describe '#index crop photos' do describe '#index crop photos' do
let!(:photo) { FactoryBot.create(:photo, :reindex, owner: member, title: 'no assocations photo') } let!(:photo) { create(:photo, :reindex, owner: member, title: 'no assocations photo') }
let!(:crop_photo) { FactoryBot.create(:photo, :reindex, owner: member, title: 'photos of planting') } let!(:crop_photo) { create(:photo, :reindex, owner: member, title: 'photos of planting') }
let!(:planting) { FactoryBot.create(:planting, :reindex, crop:, owner: member) } let!(:planting) { create(:planting, :reindex, crop:, owner: member) }
let!(:crop) { FactoryBot.create(:crop, :reindex) } let!(:crop) { create(:crop, :reindex) }
before do before do
planting.photos << crop_photo planting.photos << crop_photo
@@ -49,12 +49,12 @@ describe PhotosController, :search do
end end
describe "GET new" do describe "GET new" do
let(:tomato) { FactoryBot.create(:tomato) } let(:tomato) { create(:tomato) }
let(:planting) { FactoryBot.create(:planting, crop: tomato, owner: member) } let(:planting) { create(:planting, crop: tomato, owner: member) }
let(:garden) { FactoryBot.create(:garden, owner: member) } let(:garden) { create(:garden, owner: member) }
let(:harvest) { FactoryBot.create(:harvest, owner: member) } let(:harvest) { create(:harvest, owner: member) }
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
let!(:auth) { FactoryBot.create(:flickr_authentication, member:) } let!(:auth) { create(:flickr_authentication, member:) }
before do before do
sign_in member sign_in member
@@ -97,11 +97,11 @@ describe PhotosController, :search do
link_url: "http://example.com") link_url: "http://example.com")
end end
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
let(:garden) { FactoryBot.create(:garden, owner: member) } let(:garden) { create(:garden, owner: member) }
let(:planting) { FactoryBot.create(:planting, garden:, owner: member) } let(:planting) { create(:planting, garden:, owner: member) }
let(:harvest) { FactoryBot.create(:harvest, owner: member) } let(:harvest) { create(:harvest, owner: member) }
let(:photo) { FactoryBot.create(:photo, owner: member) } let(:photo) { create(:photo, owner: member) }
describe "with valid params" do describe "with valid params" do
before { controller.stub(:current_member) { member } } before { controller.stub(:current_member) { member } }
@@ -153,7 +153,7 @@ describe PhotosController, :search do
end end
it "doesn't attach photo to a comment" do it "doesn't attach photo to a comment" do
comment = FactoryBot.create(:comment) comment = create(:comment)
expect do expect do
post :create, params: { post :create, params: {
photo: { source_id: photo.source_id, source: 'flickr' }, type: "comment", id: comment.id photo: { source_id: photo.source_id, source: 'flickr' }, type: "comment", id: comment.id
@@ -163,7 +163,7 @@ describe PhotosController, :search do
end end
describe "for the second time" do describe "for the second time" do
let(:planting) { FactoryBot.create(:planting, owner: member) } let(:planting) { create(:planting, owner: member) }
let(:valid_params) { { photo: { source_id: 1 }, id: planting.id, type: 'planting' } } let(:valid_params) { { photo: { source_id: 1 }, id: planting.id, type: 'planting' } }
it "does not add a photo twice" do it "does not add a photo twice" do
@@ -176,8 +176,8 @@ describe PhotosController, :search do
before { controller.stub(:current_member) { member } } before { controller.stub(:current_member) { member } }
describe "creates the planting/photo link" do describe "creates the planting/photo link" do
let(:planting) { FactoryBot.create(:planting, garden:, owner: member) } let(:planting) { create(:planting, garden:, owner: member) }
let(:photo) { FactoryBot.create(:photo, owner: member) } let(:photo) { create(:photo, owner: member) }
before { post :create, params: { photo: { source_id: photo.source_id, source: 'flickr' }, type: "planting", id: planting.id } } before { post :create, params: { photo: { source_id: photo.source_id, source: 'flickr' }, type: "planting", id: planting.id } }
@@ -196,11 +196,11 @@ describe PhotosController, :search do
end end
describe "with mismatched owners" do describe "with mismatched owners" do
let(:photo) { FactoryBot.create(:photo) } let(:photo) { create(:photo) }
it "does not create the planting/photo link" do it "does not create the planting/photo link" do
# members will be auto-created, and different # members will be auto-created, and different
another_planting = FactoryBot.create(:planting) another_planting = create(:planting)
expect do expect do
post :create, params: { post :create, params: {
photo: { source_id: photo.source_id, source: 'flickr' }, photo: { source_id: photo.source_id, source: 'flickr' },
@@ -212,7 +212,7 @@ describe PhotosController, :search do
it "does not create the harvest/photo link" do it "does not create the harvest/photo link" do
# members will be auto-created, and different # members will be auto-created, and different
another_harvest = FactoryBot.create(:harvest) another_harvest = create(:harvest)
expect do expect do
post :create, params: { post :create, params: {
photo: { source_id: photo.source_id, source: 'flickr' }, type: "harvest", id: another_harvest.id photo: { source_id: photo.source_id, source: 'flickr' }, type: "harvest", id: another_harvest.id

View File

@@ -9,8 +9,8 @@ describe PlacesController do
describe "GET show" do describe "GET show" do
before do before do
@member_london = FactoryBot.create(:london_member) @member_london = create(:london_member)
@member_south_pole = FactoryBot.create(:south_pole_member) @member_south_pole = create(:south_pole_member)
end end
it "assigns place name" do it "assigns place name" do

View File

@@ -1,6 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
describe PlantPartsController do
end

View File

@@ -7,18 +7,18 @@ describe PlantingsController, :search do
def valid_attributes def valid_attributes
{ {
garden_id: FactoryBot.create(:garden, owner: subject.current_member).id, garden_id: create(:garden, owner: subject.current_member).id,
crop_id: FactoryBot.create(:crop).id crop_id: create(:crop).id
} }
end end
describe "GET index", :search do describe "GET index", :search do
let!(:member1) { FactoryBot.create(:member) } let!(:member1) { create(:member) }
let!(:member2) { FactoryBot.create(:member) } let!(:member2) { create(:member) }
let!(:tomato) { FactoryBot.create(:tomato) } let!(:tomato) { create(:tomato) }
let!(:maize) { FactoryBot.create(:maize) } let!(:maize) { create(:maize) }
let!(:planting1) { FactoryBot.create(:planting, crop: tomato, owner: member1, created_at: 1.day.ago) } let!(:planting1) { create(:planting, crop: tomato, owner: member1, created_at: 1.day.ago) }
let!(:planting2) { FactoryBot.create(:planting, crop: maize, owner: member2, created_at: 5.days.ago) } let!(:planting2) { create(:planting, crop: maize, owner: member2, created_at: 5.days.ago) }
before do before do
Planting.reindex Planting.reindex
@@ -50,7 +50,7 @@ describe PlantingsController, :search do
describe "GET new" do describe "GET new" do
describe "picks up crop from params" do describe "picks up crop from params" do
let(:crop) { FactoryBot.create(:crop) } let(:crop) { create(:crop) }
before { get :new, params: { crop_id: crop.id } } before { get :new, params: { crop_id: crop.id } }
@@ -64,7 +64,7 @@ describe PlantingsController, :search do
end end
describe "picks up member's garden from params" do describe "picks up member's garden from params" do
let(:garden) { FactoryBot.create(:garden, owner: member) } let(:garden) { create(:garden, owner: member) }
before { get :new, params: { garden_id: garden.id } } before { get :new, params: { garden_id: garden.id } }
@@ -72,8 +72,8 @@ describe PlantingsController, :search do
end end
describe "Doesn't display another member's garden on planting form" do describe "Doesn't display another member's garden on planting form" do
let(:another_member) { FactoryBot.create(:member) } # over-riding member from login_member() let(:another_member) { create(:member) } # over-riding member from login_member()
let(:garden) { FactoryBot.create(:garden, owner: another_member) } let(:garden) { create(:garden, owner: another_member) }
before { get :new, params: { garden_id: garden.id } } before { get :new, params: { garden_id: garden.id } }
@@ -81,8 +81,8 @@ describe PlantingsController, :search do
end end
describe "Doesn't display un-approved crops on planting form" do describe "Doesn't display un-approved crops on planting form" do
let(:crop) { FactoryBot.create(:crop, approval_status: 'pending') } let(:crop) { create(:crop, approval_status: 'pending') }
let!(:garden) { FactoryBot.create(:garden, owner: member) } let!(:garden) { create(:garden, owner: member) }
before { get :new, params: { crop_id: crop.id } } before { get :new, params: { crop_id: crop.id } }
@@ -90,8 +90,8 @@ describe PlantingsController, :search do
end end
describe "Doesn't display rejected crops on planting form" do describe "Doesn't display rejected crops on planting form" do
let(:crop) { FactoryBot.create(:crop, approval_status: 'rejected', reason_for_rejection: 'nope') } let(:crop) { create(:crop, approval_status: 'rejected', reason_for_rejection: 'nope') }
let!(:garden) { FactoryBot.create(:garden, owner: member) } let!(:garden) { create(:garden, owner: member) }
before { get :new, params: { crop_id: crop.id } } before { get :new, params: { crop_id: crop.id } }
@@ -111,7 +111,7 @@ describe PlantingsController, :search do
end end
context 'with parent seed' do context 'with parent seed' do
let(:seed) { FactoryBot.create(:seed, owner: member) } let(:seed) { create(:seed, owner: member) }
before { get :new, params: { seed_id: seed.to_param } } before { get :new, params: { seed_id: seed.to_param } }
@@ -128,8 +128,8 @@ describe PlantingsController, :search do
end end
describe 'GET :edit' do describe 'GET :edit' do
let(:my_planting) { FactoryBot.create(:planting, owner: member) } let(:my_planting) { create(:planting, owner: member) }
let(:not_my_planting) { FactoryBot.create(:planting) } let(:not_my_planting) { create(:planting) }
context 'my planting' do context 'my planting' do
before { get :edit, params: { slug: my_planting } } before { get :edit, params: { slug: my_planting } }

View File

@@ -6,14 +6,14 @@ describe PostsController do
login_member login_member
def valid_attributes def valid_attributes
member = FactoryBot.create(:member) member = create(:member)
{ author_id: member.id, subject: "blah", body: "blah blah" } { author_id: member.id, subject: "blah", body: "blah blah" }
end end
describe '#index' do describe '#index' do
before do before do
FactoryBot.create_list(:post, 100) create_list(:post, 100)
FactoryBot.create_list(:post, 5, author: member) create_list(:post, 5, author: member)
end end
describe "everyone's posts" do describe "everyone's posts" do

View File

@@ -4,7 +4,7 @@ require 'rails_helper'
describe RegistrationsController do describe RegistrationsController do
before do before do
@member = FactoryBot.create(:member) @member = create(:member)
sign_in @member sign_in @member
controller.stub(:current_user) { @member } controller.stub(:current_user) { @member }
controller.stub(:devise_mapping).and_return(Devise.mappings[:member]) controller.stub(:devise_mapping).and_return(Devise.mappings[:member])
@@ -17,7 +17,7 @@ describe RegistrationsController do
end end
it "picks up the flickr auth" do it "picks up the flickr auth" do
@auth = FactoryBot.create(:flickr_authentication, member: @member) @auth = create(:flickr_authentication, member: @member)
get :edit get :edit
assigns(:flickr_auth).should eq @auth assigns(:flickr_auth).should eq @auth
end end

View File

@@ -5,7 +5,7 @@ require 'rails_helper'
describe ScientificNamesController do describe ScientificNamesController do
login_member(:crop_wrangling_member) login_member(:crop_wrangling_member)
let!(:crop) { FactoryBot.create(:tomato) } let!(:crop) { create(:tomato) }
def valid_attributes def valid_attributes
{ name: 'Solanum lycopersicum', crop_id: crop.id } { name: 'Solanum lycopersicum', crop_id: crop.id }

View File

@@ -3,7 +3,7 @@
require 'rails_helper' require 'rails_helper'
describe SeedsController, :search do describe SeedsController, :search do
let(:owner) { FactoryBot.create(:member) } let(:owner) { create(:member) }
describe "GET index" do describe "GET index" do
describe "picks up owner from params" do describe "picks up owner from params" do
@@ -26,7 +26,7 @@ describe SeedsController, :search do
end end
context 'with parent planting' do context 'with parent planting' do
let!(:planting) { FactoryBot.create(:planting, owner:) } let!(:planting) { create(:planting, owner:) }
before do before do
Seed.reindex Seed.reindex

View File

@@ -1,6 +0,0 @@
# frozen_string_literal: true
FactoryBot.define do
factory :crop_companion do
end
end

View File

@@ -29,8 +29,10 @@ describe "forums", :js do
click_button 'Save' click_button 'Save'
end end
it { expect(page).to have_current_path forum_path(Forum.last), ignore_query: true } it 'saves' do
it { expect(page).to have_content 'Forum was successfully created' } expect(page).to have_content 'Forum was successfully created'
expect(page).to have_current_path forum_path(Forum.last), ignore_query: true
end
end end
describe 'editing forum' do describe 'editing forum' do

View File

@@ -28,8 +28,10 @@ describe "plant parts", :js do
click_button 'Save' click_button 'Save'
end end
it { expect(page).to have_current_path plant_part_path(PlantPart.last), ignore_query: true } it 'saves' do
it { expect(page).to have_content 'Plant part was successfully created' } expect(page).to have_content 'Plant part was successfully created'
expect(page).to have_current_path plant_part_path(PlantPart.last), ignore_query: true
end
end end
describe 'editing plant part' do describe 'editing plant part' do

View File

@@ -32,7 +32,7 @@ RSpec.feature 'Reverting crops' do
scenario 'Member cannot revert a crop' do scenario 'Member cannot revert a crop' do
visit admin_crops_path visit admin_crops_path
expect(page).not_to have_link('Revert') expect(page).to have_no_link('Revert')
end end
end end
end end

View File

@@ -18,7 +18,7 @@ describe "Conversations", :js do
click_link 'Inbox' click_link 'Inbox'
end end
include_examples 'is accessible' it_behaves_like 'is accessible'
it { expect(page).to have_content 'something i want to say' } it { expect(page).to have_content 'something i want to say' }
it { page.percy_snapshot(page, name: 'conversations#index') } it { page.percy_snapshot(page, name: 'conversations#index') }
@@ -73,13 +73,13 @@ describe "Conversations", :js do
click_link recipient.login_name click_link recipient.login_name
click_link 'Inbox' click_link 'Inbox'
expect(page).to have_selector('.sent') expect(page).to have_css('.sent')
find('.sent').click find('.sent').click
all('input[type=checkbox]').each(&:click) all('input[type=checkbox]').each(&:click)
click_button 'Delete' click_button 'Delete'
expect(page).to have_selector('.sent') expect(page).to have_css('.sent')
find('.sent').click find('.sent').click
expect(page).to have_no_content 'this is a message' expect(page).to have_no_content 'this is a message'
expect(page).to have_no_content 'this is another message' expect(page).to have_no_content 'this is another message'

View File

@@ -83,23 +83,23 @@ describe "Alternate names", :js do
end end
context 'Anonymous' do context 'Anonymous' do
include_examples 'show alt names' it_behaves_like 'show alt names'
end end
context 'Signed in member' do context 'Signed in member' do
include_context 'signed in member' include_context 'signed in member'
include_examples 'show alt names' it_behaves_like 'show alt names'
end end
context 'Crop wrangler' do context 'Crop wrangler' do
include_context 'signed in crop wrangler' include_context 'signed in crop wrangler'
include_examples 'show alt names' it_behaves_like 'show alt names'
include_examples 'edit alt names' it_behaves_like 'edit alt names'
end end
context 'Admin' do context 'Admin' do
include_context 'signed in admin' include_context 'signed in admin'
include_examples 'show alt names' it_behaves_like 'show alt names'
include_examples 'edit alt names' it_behaves_like 'edit alt names'
end end
end end

View File

@@ -3,10 +3,10 @@
require 'rails_helper' require 'rails_helper'
describe "browse crops", :search do describe "browse crops", :search do
let!(:tomato) { FactoryBot.create(:tomato, :reindex) } let!(:tomato) { create(:tomato, :reindex) }
let!(:maize) { FactoryBot.create(:maize, :reindex) } let!(:maize) { create(:maize, :reindex) }
let!(:pending_crop) { FactoryBot.create(:crop_request, :reindex) } let!(:pending_crop) { create(:crop_request, :reindex) }
let!(:rejected_crop) { FactoryBot.create(:rejected_crop, :reindex) } let!(:rejected_crop) { create(:rejected_crop, :reindex) }
shared_examples 'shows crops' do shared_examples 'shows crops' do
before do before do
@@ -34,25 +34,25 @@ describe "browse crops", :search do
end end
context 'anon' do context 'anon' do
include_examples 'shows crops' it_behaves_like 'shows crops'
it { expect(page).to have_no_link "Add New Crop" } it { expect(page).to have_no_link "Add New Crop" }
end end
context 'member' do context 'member' do
include_context 'signed in member' include_context 'signed in member'
include_examples 'shows crops' it_behaves_like 'shows crops'
include_examples 'add new crop' it_behaves_like 'add new crop'
end end
context 'wrangler' do context 'wrangler' do
include_context 'signed in crop wrangler' include_context 'signed in crop wrangler'
include_examples 'shows crops' it_behaves_like 'shows crops'
include_examples 'add new crop' it_behaves_like 'add new crop'
end end
context 'admin' do context 'admin' do
include_context 'signed in admin' include_context 'signed in admin'
include_examples 'shows crops' it_behaves_like 'shows crops'
include_examples 'add new crop' it_behaves_like 'add new crop'
end end
end end

View File

@@ -33,7 +33,7 @@ describe "Crop", :js do
shared_examples 'request crop' do shared_examples 'request crop' do
describe "requesting a crop with multiple scientific and alternate name" do describe "requesting a crop with multiple scientific and alternate name" do
include_examples 'fill in form' it_behaves_like 'fill in form'
before do before do
within "form#new_crop" do within "form#new_crop" do
fill_in "request_notes", with: "This is the Philippine national flower." fill_in "request_notes", with: "This is the Philippine national flower."
@@ -50,7 +50,7 @@ describe "Crop", :js do
shared_examples 'create crop' do shared_examples 'create crop' do
describe "creating a crop with multiple scientific and alternate name" do describe "creating a crop with multiple scientific and alternate name" do
include_examples 'fill in form' it_behaves_like 'fill in form'
before do before do
click_button "Save" click_button "Save"
end end
@@ -69,16 +69,16 @@ describe "Crop", :js do
context 'member' do context 'member' do
include_context 'signed in member' include_context 'signed in member'
include_examples 'request crop' it_behaves_like 'request crop'
end end
context 'crop wrangler' do context 'crop wrangler' do
include_context 'signed in crop wrangler' include_context 'signed in crop wrangler'
include_examples 'create crop' it_behaves_like 'create crop'
end end
context 'admin' do context 'admin' do
include_context 'signed in admin' include_context 'signed in admin'
include_examples 'create crop' it_behaves_like 'create crop'
end end
end end

View File

@@ -14,7 +14,7 @@ describe "crop detail page", :js do
end end
before do before do
FactoryBot.create(:plant_part, name: 'leaf') create(:plant_part, name: 'leaf')
end end
let(:crop) { create(:crop) } let(:crop) { create(:crop) }
@@ -112,14 +112,14 @@ describe "crop detail page", :js do
describe 'with harvest history data' do describe 'with harvest history data' do
before do before do
# 50 days to harvest # 50 days to harvest
FactoryBot.create(:harvest, harvested_at: 150.days.ago, crop:, create(:harvest, harvested_at: 150.days.ago, crop:,
planting: FactoryBot.create(:planting, planted_at: 200.days.ago, crop:)) planting: create(:planting, planted_at: 200.days.ago, crop:))
# 20 days to harvest # 20 days to harvest
FactoryBot.create(:harvest, harvested_at: 180.days.ago, crop:, create(:harvest, harvested_at: 180.days.ago, crop:,
planting: FactoryBot.create(:planting, planted_at: 200.days.ago, crop:)) planting: create(:planting, planted_at: 200.days.ago, crop:))
# 10 days to harvest # 10 days to harvest
FactoryBot.create(:harvest, harvested_at: 190.days.ago, crop:, create(:harvest, harvested_at: 190.days.ago, crop:,
planting: FactoryBot.create(:planting, planted_at: 200.days.ago, crop:)) planting: create(:planting, planted_at: 200.days.ago, crop:))
crop.update_medians crop.update_medians
end end
@@ -131,13 +131,13 @@ describe "crop detail page", :js do
context 'predictions' do context 'predictions' do
let!(:planting) do let!(:planting) do
FactoryBot.create(:planting, crop:, create(:planting, crop:,
planted_at: 100.days.ago, planted_at: 100.days.ago,
finished_at: 1.day.ago) finished_at: 1.day.ago)
end end
context 'crop is an Annual' do context 'crop is an Annual' do
let(:crop) { FactoryBot.create(:annual_crop) } let(:crop) { create(:annual_crop) }
describe 'with harvests' do describe 'with harvests' do
it_behaves_like "predicts harvest" it_behaves_like "predicts harvest"
@@ -155,10 +155,7 @@ describe "crop detail page", :js do
end end
context 'crop is Perennial' do context 'crop is Perennial' do
let(:crop) { FactoryBot.create(:perennial_crop) } let(:crop) { create(:perennial_crop) }
describe 'with no harvests' do
end
describe 'with harvests' do describe 'with harvests' do
it_behaves_like "predicts harvest" it_behaves_like "predicts harvest"
@@ -171,10 +168,7 @@ describe "crop detail page", :js do
end end
context 'crop Perennial value is null' do context 'crop Perennial value is null' do
let(:crop) { FactoryBot.create(:crop, perennial: nil) } let(:crop) { create(:crop, perennial: nil) }
describe 'with no harvests' do
end
describe 'with harvests' do describe 'with harvests' do
it_behaves_like "predicts harvest" it_behaves_like "predicts harvest"
@@ -186,7 +180,7 @@ describe "crop detail page", :js do
before { visit crop_path(crop) } before { visit crop_path(crop) }
context 'crop is an Annual' do context 'crop is an Annual' do
let(:crop) { FactoryBot.create(:annual_crop) } let(:crop) { create(:annual_crop) }
it { expect(page).to have_text 'Annual' } it { expect(page).to have_text 'Annual' }
it { expect(page).to have_text 'living and reproducing in a single year or less' } it { expect(page).to have_text 'living and reproducing in a single year or less' }
@@ -194,7 +188,7 @@ describe "crop detail page", :js do
end end
context 'crop is Perennial' do context 'crop is Perennial' do
let(:crop) { FactoryBot.create(:perennial_crop) } let(:crop) { create(:perennial_crop) }
it { expect(find('.index-cards.facts')).to have_text 'Perennial' } it { expect(find('.index-cards.facts')).to have_text 'Perennial' }
it { expect(page).to have_text 'living more than two years' } it { expect(page).to have_text 'living more than two years' }
@@ -202,7 +196,7 @@ describe "crop detail page", :js do
end end
context 'crop Perennial value is null' do context 'crop Perennial value is null' do
let(:crop) { FactoryBot.create(:crop, perennial: nil) } let(:crop) { create(:crop, perennial: nil) }
it { expect(find('.index-cards.facts')).to have_no_text 'Perennial' } it { expect(find('.index-cards.facts')).to have_no_text 'Perennial' }
it { expect(page).to have_no_text 'Annual' } it { expect(page).to have_no_text 'Annual' }

View File

@@ -5,22 +5,22 @@ require 'rails_helper'
describe "crop detail page", :js, :search do describe "crop detail page", :js, :search do
subject { page } subject { page }
let!(:owner_member) { FactoryBot.create(:member) } let!(:owner_member) { create(:member) }
let!(:crop) { FactoryBot.create(:crop, :reindex) } let!(:crop) { create(:crop, :reindex) }
let(:plant_part) { FactoryBot.create(:plant_part, name: 'fruit') } let(:plant_part) { create(:plant_part, name: 'fruit') }
let!(:harvest) { FactoryBot.create(:harvest, crop:, owner: owner_member, plant_part:) } let!(:harvest) { create(:harvest, crop:, owner: owner_member, plant_part:) }
let!(:planting) { FactoryBot.create(:planting, crop:, owner: owner_member) } let!(:planting) { create(:planting, crop:, owner: owner_member) }
let!(:seed) { FactoryBot.create(:seed, crop:, owner: owner_member) } let!(:seed) { create(:seed, crop:, owner: owner_member) }
let!(:photo1) { FactoryBot.create(:photo, owner: owner_member) } let!(:photo1) { create(:photo, owner: owner_member) }
let!(:photo2) { FactoryBot.create(:photo, owner: owner_member) } let!(:photo2) { create(:photo, owner: owner_member) }
let!(:photo3) { FactoryBot.create(:photo, owner: owner_member) } let!(:photo3) { create(:photo, owner: owner_member) }
let!(:photo4) { FactoryBot.create(:photo, owner: owner_member) } let!(:photo4) { create(:photo, owner: owner_member) }
let!(:photo5) { FactoryBot.create(:photo, owner: owner_member) } let!(:photo5) { create(:photo, owner: owner_member) }
let!(:photo6) { FactoryBot.create(:photo, owner: owner_member) } let!(:photo6) { create(:photo, owner: owner_member) }
before do before do
planting.photos << photo1 planting.photos << photo1
@@ -59,17 +59,17 @@ describe "crop detail page", :js, :search do
context "when signed in" do context "when signed in" do
include_context 'signed in member' include_context 'signed in member'
include_examples "shows photos" it_behaves_like "shows photos"
end end
context "when signed in as photos owner" do context "when signed in as photos owner" do
include_context 'signed in member' include_context 'signed in member'
let(:member) { owner_member } let(:member) { owner_member }
include_examples "shows photos" it_behaves_like "shows photos"
end end
context "when not signed in" do context "when not signed in" do
include_examples "shows photos" it_behaves_like "shows photos"
end end
end end

View File

@@ -4,8 +4,8 @@ require 'rails_helper'
describe "Delete crop spec" do describe "Delete crop spec" do
shared_examples 'delete crop' do shared_examples 'delete crop' do
let!(:pending_crop) { FactoryBot.create(:crop_request) } let!(:pending_crop) { create(:crop_request) }
let!(:approved_crop) { FactoryBot.create(:crop) } let!(:approved_crop) { create(:crop) }
it "deletes approved crop" do it "deletes approved crop" do
visit crop_path(approved_crop) visit crop_path(approved_crop)
click_link 'Actions' click_link 'Actions'
@@ -27,11 +27,11 @@ describe "Delete crop spec" do
context "As a crop wrangler" do context "As a crop wrangler" do
include_context 'signed in crop wrangler' include_context 'signed in crop wrangler'
include_examples 'delete crop' it_behaves_like 'delete crop'
end end
context 'admin' do context 'admin' do
include_context 'signed in admin' include_context 'signed in admin'
include_examples 'delete crop' it_behaves_like 'delete crop'
end end
end end

View File

@@ -3,7 +3,7 @@
require 'rails_helper' require 'rails_helper'
describe "browse crops" do describe "browse crops" do
let(:tomato) { FactoryBot.create(:tomato) } let(:tomato) { create(:tomato) }
it "Show crop info" do it "Show crop info" do
visit crop_path(tomato) visit crop_path(tomato)
@@ -11,9 +11,9 @@ describe "browse crops" do
end end
describe "shows varieties" do describe "shows varieties" do
let!(:cherry) { FactoryBot.create(:crop, name: 'cherry tomato', parent: tomato) } let!(:cherry) { create(:crop, name: 'cherry tomato', parent: tomato) }
let!(:heirloom) { FactoryBot.create(:crop, name: 'heirloom tomato', parent: tomato) } let!(:heirloom) { create(:crop, name: 'heirloom tomato', parent: tomato) }
let!(:striped) { FactoryBot.create(:crop, name: 'striped tomato', parent: heirloom) } let!(:striped) { create(:crop, name: 'striped tomato', parent: heirloom) }
before { visit crop_path(tomato) } before { visit crop_path(tomato) }
@@ -23,10 +23,10 @@ describe "browse crops" do
end end
context "when the most recently created harvest is not the most recently harvested" do context "when the most recently created harvest is not the most recently harvested" do
before { FactoryBot.create_list(:harvest, 20, crop: tomato, harvested_at: 1.year.ago, created_at: 1.minute.ago) } before { create_list(:harvest, 20, crop: tomato, harvested_at: 1.year.ago, created_at: 1.minute.ago) }
let!(:most_recent_harvest) do let!(:most_recent_harvest) do
FactoryBot.create(:harvest, crop: tomato, harvested_at: 60.minutes.ago, created_at: 10.minutes.ago) create(:harvest, crop: tomato, harvested_at: 60.minutes.ago, created_at: 10.minutes.ago)
end end
it "Shows most recently harvested harvest" do it "Shows most recently harvested harvest" do
@@ -36,10 +36,10 @@ describe "browse crops" do
end end
context "when the most recently created planting is not the most recently planted" do context "when the most recently created planting is not the most recently planted" do
before { FactoryBot.create_list(:planting, 20, crop: tomato, planted_at: 1.year.ago, created_at: 1.minute.ago) } before { create_list(:planting, 20, crop: tomato, planted_at: 1.year.ago, created_at: 1.minute.ago) }
let!(:most_recent_planting) do let!(:most_recent_planting) do
FactoryBot.create(:planting, crop: tomato, planted_at: 60.minutes.ago, created_at: 10.minutes.ago) create(:planting, crop: tomato, planted_at: 60.minutes.ago, created_at: 10.minutes.ago)
end end
it "Shows most recently planted planting" do it "Shows most recently planted planting" do

View File

@@ -10,7 +10,7 @@ describe "footer" do
end end
it 'has the Open Service link and graphic' do it 'has the Open Service link and graphic' do
expect(page).to have_selector 'a[href="https://opendefinition.org/ossd/"]' expect(page).to have_css 'a[href="https://opendefinition.org/ossd/"]'
end end
# NB: not testing specific content in the footer since I'm going to put them # NB: not testing specific content in the footer since I'm going to put them

View File

@@ -9,7 +9,7 @@ describe "Gardens" do
include_context 'signed in member' include_context 'signed in member'
let(:garden) { member.gardens.first } let(:garden) { member.gardens.first }
let(:other_member_garden) { FactoryBot.create(:garden) } let(:other_member_garden) { create(:garden) }
describe '#index' do describe '#index' do
shared_examples "has buttons bar at top" do shared_examples "has buttons bar at top" do
@@ -25,7 +25,7 @@ describe "Gardens" do
context 'my gardens' do context 'my gardens' do
before { visit gardens_path(member_slug: member.slug) } before { visit gardens_path(member_slug: member.slug) }
include_examples "has buttons bar at top" it_behaves_like "has buttons bar at top"
context 'with actions menu expanded' do context 'with actions menu expanded' do
before { click_link 'Actions' } before { click_link 'Actions' }
@@ -43,13 +43,13 @@ describe "Gardens" do
context 'all gardens' do context 'all gardens' do
before { visit gardens_path } before { visit gardens_path }
include_examples "has buttons bar at top" it_behaves_like "has buttons bar at top"
end end
context "other member's garden" do context "other member's garden" do
before { visit gardens_path(member_slug: FactoryBot.create(:member).slug) } before { visit gardens_path(member_slug: create(:member).slug) }
include_examples "has buttons bar at top" it_behaves_like "has buttons bar at top"
describe 'does not show actions on other member garden' do describe 'does not show actions on other member garden' do
it { is_expected.to have_no_link 'Actions' } it { is_expected.to have_no_link 'Actions' }
end end

View File

@@ -8,13 +8,13 @@ describe "Gardens", :js do
include_context 'signed in member' include_context 'signed in member'
before { visit new_garden_path } before { visit new_garden_path }
include_examples 'is accessible' it_behaves_like 'is accessible'
it "displays required and optional fields properly" do it "displays required and optional fields properly" do
expect(page).to have_selector ".required", text: "Name" expect(page).to have_css ".required", text: "Name"
expect(page).to have_selector 'textarea#garden_description' expect(page).to have_css 'textarea#garden_description'
expect(page).to have_selector 'input#garden_location' expect(page).to have_css 'input#garden_location'
expect(page).to have_selector 'input#garden_area' expect(page).to have_css 'input#garden_area'
end end
it "Create new garden" do it "Create new garden" do

View File

@@ -6,15 +6,15 @@ require 'custom_matchers'
describe "Gardens#index", :js do describe "Gardens#index", :js do
context "Logged in as member" do context "Logged in as member" do
include_context 'signed in member' include_context 'signed in member'
let(:member) { FactoryBot.create(:member, login_name: 'shadow') } let(:member) { create(:member, login_name: 'shadow') }
context "with 10 gardens" do context "with 10 gardens" do
before do before do
FactoryBot.create_list(:garden, 10, owner: member) create_list(:garden, 10, owner: member)
visit member_gardens_path(member_slug: member.slug) visit member_gardens_path(member_slug: member.slug)
end end
include_examples 'is accessible' it_behaves_like 'is accessible'
it "displays each of the gardens" do it "displays each of the gardens" do
member.gardens.each do |garden| member.gardens.each do |garden|
@@ -30,8 +30,8 @@ describe "Gardens#index", :js do
end end
context "with inactive gardens" do context "with inactive gardens" do
let!(:active_garden) { FactoryBot.create(:garden, name: "My active garden", owner: member) } let!(:active_garden) { create(:garden, name: "My active garden", owner: member) }
let!(:inactive_garden) { FactoryBot.create(:inactive_garden, name: "retired garden", owner: member) } let!(:inactive_garden) { create(:inactive_garden, name: "retired garden", owner: member) }
before { visit member_gardens_path(member_slug: member.slug) } before { visit member_gardens_path(member_slug: member.slug) }
@@ -53,14 +53,14 @@ describe "Gardens#index", :js do
end end
context 'with plantings' do context 'with plantings' do
let(:maize) { FactoryBot.create(:maize) } let(:maize) { create(:maize) }
let(:tomato) { FactoryBot.create(:tomato) } let(:tomato) { create(:tomato) }
let!(:planting) do let!(:planting) do
FactoryBot.create(:planting, owner: member, crop: maize, garden: member.gardens.first) create(:planting, owner: member, crop: maize, garden: member.gardens.first)
end end
let!(:finished_planting) do let!(:finished_planting) do
FactoryBot.create(:finished_planting, owner: member, crop: tomato, garden: member.gardens.first) create(:finished_planting, owner: member, crop: tomato, garden: member.gardens.first)
end end
before do before do
@@ -79,19 +79,19 @@ describe "Gardens#index", :js do
describe 'badges' do describe 'badges' do
let(:garden) { member.gardens.first } let(:garden) { member.gardens.first }
let(:member) { FactoryBot.create(:member, login_name: 'robbieburns') } let(:member) { create(:member, login_name: 'robbieburns') }
let(:crop) { FactoryBot.create(:crop) } let(:crop) { create(:crop) }
before do before do
# time to harvest = 50 day # time to harvest = 50 day
# time to finished = 90 days # time to finished = 90 days
FactoryBot.create(:harvest, create(:harvest,
harvested_at: 50.days.ago, harvested_at: 50.days.ago,
crop:, crop:,
planting: FactoryBot.create(:planting, planting: create(:planting,
crop:, crop:,
planted_at: 100.days.ago, planted_at: 100.days.ago,
finished_at: 10.days.ago)) finished_at: 10.days.ago))
crop.plantings.each(&:update_harvest_days!) crop.plantings.each(&:update_harvest_days!)
crop.update_lifespan_medians crop.update_lifespan_medians
crop.update_harvest_medians crop.update_harvest_medians
@@ -103,11 +103,11 @@ describe "Gardens#index", :js do
describe 'harvest still growing' do describe 'harvest still growing' do
let!(:planting) do let!(:planting) do
FactoryBot.create(:planting, create(:planting,
crop:, crop:,
owner: member, owner: member,
garden:, garden:,
planted_at: Time.zone.today) planted_at: Time.zone.today)
end end
it { expect(page).to have_link href: planting_path(planting) } it { expect(page).to have_link href: planting_path(planting) }
@@ -118,10 +118,10 @@ describe "Gardens#index", :js do
describe 'harvesting now' do describe 'harvesting now' do
let!(:planting) do let!(:planting) do
FactoryBot.create(:planting, create(:planting,
crop:, crop:,
owner: member, garden:, owner: member, garden:,
planted_at: 51.days.ago) planted_at: 51.days.ago)
end end
it { expect(crop.median_days_to_first_harvest).to eq 50 } it { expect(crop.median_days_to_first_harvest).to eq 50 }
@@ -133,9 +133,9 @@ describe "Gardens#index", :js do
describe 'super late' do describe 'super late' do
let!(:planting) do let!(:planting) do
FactoryBot.create(:planting, create(:planting,
crop:, owner: member, crop:, owner: member,
garden:, planted_at: 260.days.ago) garden:, planted_at: 260.days.ago)
end end
it { expect(page).to have_text 'super late' } it { expect(page).to have_text 'super late' }

View File

@@ -14,10 +14,10 @@ describe "Harvesting a crop", :js, :search do
it_behaves_like "crop suggest", "harvest", "crop" it_behaves_like "crop suggest", "harvest", "crop"
describe "displays required and optional fields properly" do describe "displays required and optional fields properly" do
it { expect(page).to have_selector ".required", text: "What did you harvest?" } it { expect(page).to have_css ".required", text: "What did you harvest?" }
it { expect(page).to have_selector 'input#harvest_quantity' } it { expect(page).to have_css 'input#harvest_quantity' }
it { expect(page).to have_selector 'input#harvest_weight_quantity' } it { expect(page).to have_css 'input#harvest_weight_quantity' }
it { expect(page).to have_selector 'textarea#harvest_description' } it { expect(page).to have_css 'textarea#harvest_description' }
end end
it "Creating a new harvest", :js do it "Creating a new harvest", :js do

View File

@@ -5,18 +5,18 @@ require 'rails_helper'
describe "home page", :search do describe "home page", :search do
subject { page } subject { page }
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
let(:photo) { FactoryBot.create(:photo, owner: member) } let(:photo) { create(:photo, owner: member) }
let(:crop) { FactoryBot.create(:crop, created_at: 1.day.ago) } let(:crop) { create(:crop, created_at: 1.day.ago) }
let(:planting) { FactoryBot.create(:planting, owner: member, crop:) } let(:planting) { create(:planting, owner: member, crop:) }
let(:seed) { FactoryBot.create(:tradable_seed, owner: member, crop:) } let(:seed) { create(:tradable_seed, owner: member, crop:) }
let(:harvest) { FactoryBot.create(:harvest, owner: member, crop:) } let(:harvest) { create(:harvest, owner: member, crop:) }
let!(:tradable_seed) { FactoryBot.create(:tradable_seed, :reindex, finished: false) } let!(:tradable_seed) { create(:tradable_seed, :reindex, finished: false) }
let!(:finished_seed) { FactoryBot.create(:tradable_seed, :reindex, finished: true) } let!(:finished_seed) { create(:tradable_seed, :reindex, finished: true) }
let!(:untradable_seed) { FactoryBot.create(:untradable_seed, :reindex) } let!(:untradable_seed) { create(:untradable_seed, :reindex) }
before do before do
# Add photos, so they can appear on home page # Add photos, so they can appear on home page

View File

@@ -3,12 +3,12 @@
require 'rails_helper' require 'rails_helper'
describe 'Likeable', :js, :search do describe 'Likeable', :js, :search do
let(:another_member) { FactoryBot.create(:london_member) } let(:another_member) { create(:london_member) }
let!(:post) { FactoryBot.create(:post, :reindex, author: member) } let!(:post) { create(:post, :reindex, author: member) }
let!(:activity) { FactoryBot.create(:activity, :reindex, owner: member) } let!(:activity) { create(:activity, :reindex, owner: member) }
let!(:photo) { FactoryBot.create(:photo, :reindex, owner: member) } let!(:photo) { create(:photo, :reindex, owner: member) }
let!(:harvest) { FactoryBot.create(:harvest, :reindex, owner: member) } let!(:harvest) { create(:harvest, :reindex, owner: member) }
let!(:planting) { FactoryBot.create(:planting, :reindex, owner: member) } let!(:planting) { create(:planting, :reindex, owner: member) }
before do before do
Photo.reindex Photo.reindex
@@ -58,23 +58,23 @@ describe 'Likeable', :js, :search do
describe 'photos#index' do describe 'photos#index' do
let(:path) { photos_path } let(:path) { photos_path }
include_examples 'object can be liked' it_behaves_like 'object can be liked'
end end
describe 'photos#show' do describe 'photos#show' do
let(:path) { photo_path(photo) } let(:path) { photo_path(photo) }
include_examples 'object can be liked' it_behaves_like 'object can be liked'
end end
describe 'crops#show' do describe 'crops#show' do
let(:crop) { FactoryBot.create(:crop) } let(:crop) { create(:crop) }
let(:planting) { FactoryBot.create(:planting, owner: member, crop:) } let(:planting) { create(:planting, owner: member, crop:) }
let(:path) { crop_path(crop) } let(:path) { crop_path(crop) }
before { planting.photos << photo } before { planting.photos << photo }
include_examples 'object can be liked' it_behaves_like 'object can be liked'
end end
end end
@@ -82,27 +82,27 @@ describe 'Likeable', :js, :search do
let(:like_count_class) { ".post-#{post.id} .like-count" } let(:like_count_class) { ".post-#{post.id} .like-count" }
let(:path) { post_path(post) } let(:path) { post_path(post) }
include_examples 'object can be liked' it_behaves_like 'object can be liked'
end end
describe 'activities' do describe 'activities' do
let(:like_count_class) { ".activity-#{activity.id} .like-count" } let(:like_count_class) { ".activity-#{activity.id} .like-count" }
let(:path) { activity_path(activity) } let(:path) { activity_path(activity) }
include_examples 'object can be liked' it_behaves_like 'object can be liked'
end end
describe 'plantings' do describe 'plantings' do
let(:like_count_class) { ".planting-#{planting.id} .like-count" } let(:like_count_class) { ".planting-#{planting.id} .like-count" }
let(:path) { planting_path(planting) } let(:path) { planting_path(planting) }
include_examples 'object can be liked' it_behaves_like 'object can be liked'
end end
describe 'harvests' do describe 'harvests' do
let(:like_count_class) { ".harvest-#{harvest.id} .like-count" } let(:like_count_class) { ".harvest-#{harvest.id} .like-count" }
let(:path) { harvest_path(harvest) } let(:path) { harvest_path(harvest) }
include_examples 'object can be liked' it_behaves_like 'object can be liked'
end end
end end

View File

@@ -5,7 +5,7 @@ require 'rails_helper'
describe "Changing locales", :js do describe "Changing locales", :js do
after { I18n.locale = :en } after { I18n.locale = :en }
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
it "Locale can be set with a query param" do it "Locale can be set with a query param" do
# Login then log out, to ensure we're now logged out # Login then log out, to ensure we're now logged out

View File

@@ -3,8 +3,8 @@
require 'rails_helper' require 'rails_helper'
describe "members list" do describe "members list" do
let!(:spammer) { FactoryBot.create(:member) } let!(:spammer) { create(:member) }
let!(:admin) { FactoryBot.create(:admin_member) } let!(:admin) { create(:admin_member) }
context 'logged in as admin' do context 'logged in as admin' do
include_context 'signed in admin' include_context 'signed in admin'

View File

@@ -4,26 +4,26 @@ require 'rails_helper'
describe "member deletion", :flaky do describe "member deletion", :flaky do
context "with activity and followers" do context "with activity and followers" do
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
let(:other_member) { FactoryBot.create(:member) } let(:other_member) { create(:member) }
let(:memberpost) { FactoryBot.create(:post, author: member) } let(:memberpost) { create(:post, author: member) }
let(:othermemberpost) { FactoryBot.create(:post, author: other_member) } let(:othermemberpost) { create(:post, author: other_member) }
let!(:planting) { FactoryBot.create(:planting, owner: member) } let!(:planting) { create(:planting, owner: member) }
let!(:harvest) { FactoryBot.create(:harvest, owner: member) } let!(:harvest) { create(:harvest, owner: member) }
let!(:seed) { FactoryBot.create(:seed, owner: member) } let!(:seed) { create(:seed, owner: member) }
let!(:secondgarden) { FactoryBot.create(:garden, owner: member) } let!(:secondgarden) { create(:garden, owner: member) }
before do before do
member.follows.create!(followed: other_member) member.follows.create!(followed: other_member)
other_member.follows.create!(followed: member) other_member.follows.create!(followed: member)
login_as(member) login_as(member)
FactoryBot.create(:comment, author: member, post: othermemberpost) create(:comment, author: member, post: othermemberpost)
FactoryBot.create(:comment, author: other_member, post: memberpost, body: "Fun comment-y thing") create(:comment, author: other_member, post: memberpost, body: "Fun comment-y thing")
# deletion breaks if no wranglers exist # deletion breaks if no wranglers exist
FactoryBot.create(:cropbot) create(:cropbot)
# deletion breaks if ex_member doesn't exist # deletion breaks if ex_member doesn't exist
FactoryBot.create(:member, login_name: "ex_member") create(:member, login_name: "ex_member")
end end
it "has option to delete on member profile page" do it "has option to delete on member profile page" do
@@ -136,7 +136,7 @@ describe "member deletion", :flaky do
end end
it "replaces comments on others' posts with deletion note, leaving post intact" do it "replaces comments on others' posts with deletion note, leaving post intact" do
FactoryBot.create(:comment, post: othermemberpost, author: member, body: 'i am deleting my account') create(:comment, post: othermemberpost, author: member, body: 'i am deleting my account')
visit post_path(othermemberpost) visit post_path(othermemberpost)
expect(page).to have_no_content member.login_name expect(page).to have_no_content member.login_name
@@ -163,12 +163,12 @@ describe "member deletion", :flaky do
end end
context "for a crop wrangler" do context "for a crop wrangler" do
let(:member) { FactoryBot.create(:crop_wrangling_member) } let(:member) { create(:crop_wrangling_member) }
let!(:ex_wrangler) { FactoryBot.create(:crop_wrangling_member, login_name: "ex_wrangler") } let!(:ex_wrangler) { create(:crop_wrangling_member, login_name: "ex_wrangler") }
let(:otherwrangler) { FactoryBot.create(:crop_wrangling_member) } let(:otherwrangler) { create(:crop_wrangling_member) }
let(:crop) { FactoryBot.create(:crop, creator: member) } let(:crop) { create(:crop, creator: member) }
before { FactoryBot.create(:cropbot) } before { create(:cropbot) }
it "leaves crops behind" do it "leaves crops behind" do
login_as(otherwrangler) login_as(otherwrangler)

View File

@@ -13,7 +13,7 @@ describe "members list" do
before do before do
visit members_path visit members_path
expect(page).to have_css "#sort" expect(page).to have_css "#sort"
expect(page).to have_selector "form" expect(page).to have_css "form"
end end
it "default alphabetical sort" do it "default alphabetical sort" do

View File

@@ -62,10 +62,10 @@ describe "member profile", :js do
end end
context "with some activity" do context "with some activity" do
let!(:planting) { FactoryBot.create(:planting, owner: member) } let!(:planting) { create(:planting, owner: member) }
let!(:harvest) { FactoryBot.create(:harvest, owner: member) } let!(:harvest) { create(:harvest, owner: member) }
let!(:seed) { FactoryBot.create(:seed, owner: member) } let!(:seed) { create(:seed, owner: member) }
let!(:post) { FactoryBot.create(:post, author: member) } let!(:post) { create(:post, author: member) }
before { visit member_path(member) } before { visit member_path(member) }
@@ -104,10 +104,10 @@ describe "member profile", :js do
shared_examples 'member activity' do shared_examples 'member activity' do
context 'member has plantings' do context 'member has plantings' do
let!(:new_planting) { FactoryBot.create(:planting, owner: member, planted_at: Time.zone.now) } let!(:new_planting) { create(:planting, owner: member, planted_at: Time.zone.now) }
let!(:old_planting) { FactoryBot.create(:planting, owner: member, planted_at: 3.years.ago) } let!(:old_planting) { create(:planting, owner: member, planted_at: 3.years.ago) }
let!(:finished_planting) { FactoryBot.create(:finished_planting, owner: member) } let!(:finished_planting) { create(:finished_planting, owner: member) }
let!(:no_planted_at_planting) { FactoryBot.create(:planting, owner: member, planted_at: nil) } let!(:no_planted_at_planting) { create(:planting, owner: member, planted_at: nil) }
before { visit member_path(member) } before { visit member_path(member) }
@@ -118,9 +118,9 @@ describe "member profile", :js do
end end
context 'member has activities' do context 'member has activities' do
let!(:activity) { FactoryBot.create(:activity, owner: member, due_date: 3.days.ago) } let!(:activity) { create(:activity, owner: member, due_date: 3.days.ago) }
let!(:activity2) { FactoryBot.create(:activity, :planting, owner: member) } let!(:activity2) { create(:activity, :planting, owner: member) }
let!(:activity3) { FactoryBot.create(:activity, :garden, owner: member) } let!(:activity3) { create(:activity, :garden, owner: member) }
before { visit member_path(member) } before { visit member_path(member) }
@@ -130,7 +130,7 @@ describe "member profile", :js do
end end
context 'member has seeds' do context 'member has seeds' do
let!(:seed) { FactoryBot.create(:seed, owner: member) } let!(:seed) { create(:seed, owner: member) }
before { visit member_path(member) } before { visit member_path(member) }
@@ -138,7 +138,7 @@ describe "member profile", :js do
end end
context 'member has harvests' do context 'member has harvests' do
let!(:harvest) { FactoryBot.create(:harvest, owner: member) } let!(:harvest) { create(:harvest, owner: member) }
before { visit member_path(member) } before { visit member_path(member) }
@@ -146,7 +146,7 @@ describe "member profile", :js do
end end
context 'member has posts' do context 'member has posts' do
let!(:post) { FactoryBot.create(:post, author: member) } let!(:post) { create(:post, author: member) }
before { visit member_path(member) } before { visit member_path(member) }
@@ -154,8 +154,8 @@ describe "member profile", :js do
end end
context 'member has comments' do context 'member has comments' do
let(:post) { FactoryBot.create(:post) } let(:post) { create(:post) }
let!(:comment) { FactoryBot.create(:comment, commentable: post, author: member) } let!(:comment) { create(:comment, commentable: post, author: member) }
before { visit member_path(member) } before { visit member_path(member) }
@@ -164,8 +164,8 @@ describe "member profile", :js do
end end
context 'photos' do context 'photos' do
let(:planting) { FactoryBot.create(:planting, owner: member) } let(:planting) { create(:planting, owner: member) }
let!(:photo) { FactoryBot.create(:photo, owner: member, plantings: [planting]) } let!(:photo) { create(:photo, owner: member, plantings: [planting]) }
before { visit member_path(member) } before { visit member_path(member) }
@@ -174,35 +174,35 @@ describe "member profile", :js do
end end
context 'plantings' do context 'plantings' do
let(:crop) { FactoryBot.create(:crop) } let(:crop) { create(:crop) }
let(:growing_planting) do let(:growing_planting) do
FactoryBot.create(:planting, create(:planting,
crop:, crop:,
owner: member, owner: member,
planted_at: Time.zone.today) planted_at: Time.zone.today)
end end
let(:harvesting_planting) do let(:harvesting_planting) do
FactoryBot.create(:planting, create(:planting,
crop:, crop:,
owner: member, owner: member,
planted_at: 51.days.ago) planted_at: 51.days.ago)
end end
let(:super_late_planting) do let(:super_late_planting) do
FactoryBot.create(:planting, create(:planting,
crop:, owner: member, crop:, owner: member,
planted_at: 260.days.ago) planted_at: 260.days.ago)
end end
before do before do
# time to harvest = 50 day # time to harvest = 50 day
# time to finished = 90 days # time to finished = 90 days
FactoryBot.create(:harvest, create(:harvest,
harvested_at: 50.days.ago, harvested_at: 50.days.ago,
crop:, crop:,
planting: FactoryBot.create(:planting, planting: create(:planting,
crop:, crop:,
planted_at: 100.days.ago, planted_at: 100.days.ago,
finished_at: 10.days.ago)) finished_at: 10.days.ago))
crop.plantings.each(&:update_harvest_days!) crop.plantings.each(&:update_harvest_days!)
crop.update_lifespan_medians crop.update_lifespan_medians
crop.update_harvest_medians crop.update_harvest_medians

View File

@@ -7,25 +7,25 @@ describe 'Test with visual testing', :js, type: :feature do
# on every run, so doesn't trigger percy to see changes # on every run, so doesn't trigger percy to see changes
before { Faker::Config.random = Random.new(42) } before { Faker::Config.random = Random.new(42) }
let!(:member) { FactoryBot.create(:member, login_name: 'percy', preferred_avatar_uri: gravatar) } let!(:member) { create(:member, login_name: 'percy', preferred_avatar_uri: gravatar) }
let!(:crop_wrangler) { FactoryBot.create(:crop_wrangling_member, login_name: 'croppy', preferred_avatar_uri: gravatar2) } let!(:crop_wrangler) { create(:crop_wrangling_member, login_name: 'croppy', preferred_avatar_uri: gravatar2) }
let!(:admin_user) { FactoryBot.create(:admin_member, login_name: 'janitor', preferred_avatar_uri: gravatar3) } let!(:admin_user) { create(:admin_member, login_name: 'janitor', preferred_avatar_uri: gravatar3) }
let!(:someone_else) { FactoryBot.create(:edinburgh_member, login_name: 'ruby', preferred_avatar_uri: gravatar4) } let!(:someone_else) { create(:edinburgh_member, login_name: 'ruby', preferred_avatar_uri: gravatar4) }
let(:gravatar) { 'https://secure.gravatar.com/avatar/d021434aac03a7f7c7c0de60d07dad1c?size=150&default=identicon' } let(:gravatar) { 'https://secure.gravatar.com/avatar/d021434aac03a7f7c7c0de60d07dad1c?size=150&default=identicon' }
let(:gravatar2) { 'https://secure.gravatar.com/avatar/353d83d3677b142520987e1936fd093c?size=150&default=identicon' } let(:gravatar2) { 'https://secure.gravatar.com/avatar/353d83d3677b142520987e1936fd093c?size=150&default=identicon' }
let(:gravatar3) { 'https://secure.gravatar.com/avatar/622db62c7beab8d5d8b7a80aa6385b2f?size=150&default=identicon' } let(:gravatar3) { 'https://secure.gravatar.com/avatar/622db62c7beab8d5d8b7a80aa6385b2f?size=150&default=identicon' }
let(:gravatar4) { 'https://secure.gravatar.com/avatar/7fd767571ff5ceefc7a687a543b2c402?size=150&default=identicon' } let(:gravatar4) { 'https://secure.gravatar.com/avatar/7fd767571ff5ceefc7a687a543b2c402?size=150&default=identicon' }
let!(:tomato) { FactoryBot.create(:tomato, creator: someone_else) } let!(:tomato) { create(:tomato, creator: someone_else) }
let(:plant_part) { FactoryBot.create(:plant_part, name: 'fruit') } let(:plant_part) { create(:plant_part, name: 'fruit') }
let(:tomato_photo) do let(:tomato_photo) do
FactoryBot.create(:photo, create(:photo,
title: 'look at my tomatoes', title: 'look at my tomatoes',
owner: member, owner: member,
fullsize_url: 'https://farm1.staticflickr.com/177/432250619_2fe19d067d_z.jpg', fullsize_url: 'https://farm1.staticflickr.com/177/432250619_2fe19d067d_z.jpg',
thumbnail_url: 'https://farm1.staticflickr.com/177/432250619_2fe19d067d_q.jpg') thumbnail_url: 'https://farm1.staticflickr.com/177/432250619_2fe19d067d_q.jpg')
end end
let(:post_body) do let(:post_body) do
"So, um, watering's important. Yep. Very important. "So, um, watering's important. Yep. Very important.
@@ -66,7 +66,7 @@ rest of the garden.
[apple](crop) [apple](crop)
" "
end end
let(:post) { FactoryBot.create(:post, author: member, subject: "Watering", body: post_body) } let(:post) { create(:post, author: member, subject: "Watering", body: post_body) }
before do before do
# Freeze time, so we don't have variations in timestamps on the page # Freeze time, so we don't have variations in timestamps on the page
@@ -80,23 +80,23 @@ rest of the garden.
eggplant: 'https://farm8.staticflickr.com/7856/47068736892_1af9b8a4ba_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| }.each do |crop_type, photo_url|
crop = FactoryBot.create(crop_type, creator: someone_else) crop = create(crop_type, creator: someone_else)
crop.reindex crop.reindex
owner = FactoryBot.create(:interesting_member, login_name: crop_type.to_s.reverse, email: "#{crop.name}@example.com") owner = create(:interesting_member, login_name: crop_type.to_s.reverse, email: "#{crop.name}@example.com")
planting = FactoryBot.create(:planting, crop:, owner:, garden: owner.gardens.first) planting = create(:planting, crop:, owner:, garden: owner.gardens.first)
photo = FactoryBot.create(:photo, owner:, photo = create(:photo, owner:,
thumbnail_url: "#{photo_url}_q.jpg", fullsize_url: "#{photo_url}_z.jpg") thumbnail_url: "#{photo_url}_q.jpg", fullsize_url: "#{photo_url}_z.jpg")
planting.photos << photo planting.photos << photo
harvest = FactoryBot.create(:harvest, crop:, owner:, plant_part:) harvest = create(:harvest, crop:, owner:, plant_part:)
harvest.photos << photo harvest.photos << photo
FactoryBot.create(:planting, crop: tomato, create(:planting, crop: tomato,
planted_at: 1.year.ago, finished_at: 2.months.ago, planted_at: 1.year.ago, finished_at: 2.months.ago,
sunniness: 'sun', planted_from: 'seed') sunniness: 'sun', planted_from: 'seed')
end end
FactoryBot.create(:seed, owner: member, tradable_to: 'nationally') create(:seed, owner: member, tradable_to: 'nationally')
FactoryBot.create(:seed, owner: someone_else, tradable_to: 'nationally') create(:seed, owner: someone_else, tradable_to: 'nationally')
end end
after { Timecop.return } after { Timecop.return }
@@ -111,16 +111,16 @@ rest of the garden.
describe 'crops' do describe 'crops' do
it 'loads crops#show' do it 'loads crops#show' do
FactoryBot.create(:planting, planted_at: 2.months.ago, sunniness: 'shade', planted_from: 'seedling') create(:planting, planted_at: 2.months.ago, sunniness: 'shade', planted_from: 'seedling')
planting = FactoryBot.create(:planting, planted_at: 1.year.ago, sunniness: 'sun', planted_from: 'seed', crop: tomato) planting = create(:planting, planted_at: 1.year.ago, sunniness: 'sun', planted_from: 'seed', crop: tomato)
FactoryBot.create(:harvest, create(:harvest,
crop: tomato, crop: tomato,
plant_part: FactoryBot.create(:plant_part, name: 'berry'), plant_part: create(:plant_part, name: 'berry'),
planting:, planting:,
harvested_at: 1.day.ago) harvested_at: 1.day.ago)
post = FactoryBot.create(:post, subject: 'tomatoes are delicious') post = create(:post, subject: 'tomatoes are delicious')
tomato.posts << post tomato.posts << post
visit crop_path(tomato) visit crop_path(tomato)
@@ -141,7 +141,7 @@ rest of the garden.
end end
it 'load another member plantings#show' do it 'load another member plantings#show' do
planting = FactoryBot.create(:planting, crop: tomato, owner: someone_else, garden: someone_else.gardens.first) planting = create(:planting, crop: tomato, owner: someone_else, garden: someone_else.gardens.first)
visit planting_path(planting) visit planting_path(planting)
page.percy_snapshot(page, name: "#{prefix}/plantings#show") page.percy_snapshot(page, name: "#{prefix}/plantings#show")
end end
@@ -155,14 +155,14 @@ rest of the garden.
it 'gardens#show' do it 'gardens#show' do
# a garden # a garden
garden = FactoryBot.create(:garden, name: 'paradise', owner: member) garden = create(:garden, name: 'paradise', owner: member)
# with some lettuce (finished) # with some lettuce (finished)
FactoryBot.create( create(
:planting, crop: FactoryBot.create(:crop, name: 'lettuce'), :planting, crop: create(:crop, name: 'lettuce'),
garden:, owner: member, finished_at: 2.weeks.ago garden:, owner: member, finished_at: 2.weeks.ago
) )
# tomato still growing # tomato still growing
tomato_planting = FactoryBot.create(:planting, garden:, owner: member, crop: tomato) tomato_planting = create(:planting, garden:, owner: member, crop: tomato)
tomato_photo.plantings << tomato_planting tomato_photo.plantings << tomato_planting
visit garden_path(garden) visit garden_path(garden)
page.percy_snapshot(page, name: "#{prefix}/gardens#show") page.percy_snapshot(page, name: "#{prefix}/gardens#show")
@@ -176,10 +176,10 @@ rest of the garden.
end end
it 'loads another members#show' do it 'loads another members#show' do
FactoryBot.create(:planting, owner: someone_else, created_at: 30.days.ago, crop: tomato) create(:planting, owner: someone_else, created_at: 30.days.ago, crop: tomato)
FactoryBot.create(:planting, owner: someone_else, created_at: 24.days.ago, crop: tomato) create(:planting, owner: someone_else, created_at: 24.days.ago, crop: tomato)
FactoryBot.create(:post, author: someone_else, created_at: 4.days.ago, subject: 'waiting for my tomatoes') create(:post, author: someone_else, created_at: 4.days.ago, subject: 'waiting for my tomatoes')
FactoryBot.create(:harvest, owner: someone_else, created_at: 1.day.ago, crop: tomato) create(:harvest, owner: someone_else, created_at: 1.day.ago, crop: tomato)
visit member_path(someone_else) visit member_path(someone_else)
page.percy_snapshot(page, name: "#{prefix}/members#show") page.percy_snapshot(page, name: "#{prefix}/members#show")
@@ -188,18 +188,18 @@ rest of the garden.
describe 'posts' do describe 'posts' do
it 'loads posts#show' do it 'loads posts#show' do
FactoryBot.create(:comment, commentable: post) create(:comment, commentable: post)
FactoryBot.create(:comment, commentable: post) create(:comment, commentable: post)
visit post_path(post) visit post_path(post)
page.percy_snapshot(page, name: "#{prefix}/posts#show") page.percy_snapshot(page, name: "#{prefix}/posts#show")
end end
it 'loads posts#index' do it 'loads posts#index' do
Member.all.limit(5).each do |member| Member.all.limit(5).each do |member|
FactoryBot.create_list(:post, 12, author: member) create_list(:post, 12, author: member)
end end
Post.all.order(id: :desc).limit(4) do |post| Post.all.order(id: :desc).limit(4) do |post|
FactoryBot.create_list(:comment, rand(1..5), commentable: post) create_list(:comment, rand(1..5), commentable: post)
end end
visit posts_path visit posts_path
page.percy_snapshot(page, name: "#{prefix}/posts#index") page.percy_snapshot(page, name: "#{prefix}/posts#index")
@@ -208,7 +208,7 @@ rest of the garden.
describe 'photos' do describe 'photos' do
it 'loads photos#show' do it 'loads photos#show' do
tomato_photo.plantings << FactoryBot.create(:planting, owner: member, crop: tomato) tomato_photo.plantings << create(:planting, owner: member, crop: tomato)
visit photo_path(tomato_photo) visit photo_path(tomato_photo)
page.percy_snapshot(page, name: "#{prefix}/photos#show") page.percy_snapshot(page, name: "#{prefix}/photos#show")
end end
@@ -250,7 +250,7 @@ rest of the garden.
it_behaves_like 'visit pages' it_behaves_like 'visit pages'
it 'load my plantings#show' do it 'load my plantings#show' do
planting = FactoryBot.create(:planting, crop: tomato, owner: member, garden: member.gardens.first) planting = create(:planting, crop: tomato, owner: member, garden: member.gardens.first)
visit planting_path(planting) visit planting_path(planting)
page.percy_snapshot(page, name: "#{prefix}/self/plantings#show") page.percy_snapshot(page, name: "#{prefix}/self/plantings#show")
end end
@@ -261,7 +261,7 @@ rest of the garden.
end end
it 'load my gardens#show' do it 'load my gardens#show' do
garden = FactoryBot.create(:garden, name: 'paradise', owner: member) garden = create(:garden, name: 'paradise', owner: member)
visit garden_path(garden) visit garden_path(garden)
page.percy_snapshot(page, name: "#{prefix}/self/gardens#show") page.percy_snapshot(page, name: "#{prefix}/self/gardens#show")
end end
@@ -306,19 +306,19 @@ rest of the garden.
describe '#edit' do describe '#edit' do
it 'loads gardens#edit' do it 'loads gardens#edit' do
garden = FactoryBot.create(:garden, owner: member) garden = create(:garden, owner: member)
visit edit_garden_path(garden) visit edit_garden_path(garden)
page.percy_snapshot(page, name: "#{prefix}/gardens#edit") page.percy_snapshot(page, name: "#{prefix}/gardens#edit")
end end
it 'loads harvests#edit' do it 'loads harvests#edit' do
harvest = FactoryBot.create(:harvest, owner: member) harvest = create(:harvest, owner: member)
visit edit_harvest_path(harvest) visit edit_harvest_path(harvest)
page.percy_snapshot(page, name: "#{prefix}/harvests#edit") page.percy_snapshot(page, name: "#{prefix}/harvests#edit")
end end
it 'loads planting#edit' do it 'loads planting#edit' do
planting = FactoryBot.create(:planting, owner: member) planting = create(:planting, owner: member)
visit edit_planting_path(planting) visit edit_planting_path(planting)
page.percy_snapshot(page, name: "#{prefix}/plantings#edit") page.percy_snapshot(page, name: "#{prefix}/plantings#edit")
end end
@@ -350,7 +350,7 @@ rest of the garden.
context 'wrangling crops' do context 'wrangling crops' do
include_context 'signed in crop wrangler' include_context 'signed in crop wrangler'
let!(:candy) { FactoryBot.create(:crop_request, name: 'candy') } let!(:candy) { create(:crop_request, name: 'candy') }
it 'crop wrangling page' do it 'crop wrangling page' do
visit wrangle_crops_path visit wrangle_crops_path

View File

@@ -6,7 +6,7 @@ describe "new photo page" do
context "signed in member" do context "signed in member" do
include_context 'signed in member' include_context 'signed in member'
context "viewing a planting" do context "viewing a planting" do
let(:planting) { FactoryBot.create(:planting, owner: member) } let(:planting) { create(:planting, owner: member) }
it "add photo" do it "add photo" do
visit planting_path(planting) visit planting_path(planting)
@@ -20,7 +20,7 @@ describe "new photo page" do
end end
context "viewing a harvest" do context "viewing a harvest" do
let(:harvest) { FactoryBot.create(:harvest, owner: member) } let(:harvest) { create(:harvest, owner: member) }
it "add photo" do it "add photo" do
visit harvest_path(harvest) visit harvest_path(harvest)
@@ -33,7 +33,7 @@ describe "new photo page" do
end end
context "viewing a garden" do context "viewing a garden" do
let(:garden) { FactoryBot.create(:garden, owner: member) } let(:garden) { create(:garden, owner: member) }
it "add photo" do it "add photo" do
visit garden_path(garden) visit garden_path(garden)
@@ -46,7 +46,7 @@ describe "new photo page" do
end end
describe "viewing a seed" do describe "viewing a seed" do
let(:seed) { FactoryBot.create(:seed, owner: member) } let(:seed) { create(:seed, owner: member) }
it "add photo" do it "add photo" do
visit seed_path(seed) visit seed_path(seed)

View File

@@ -30,8 +30,8 @@ describe "Planting reminder email", :js do
context "when member has some plantings" do context "when member has some plantings" do
# Bangs are used on the following 2 let blocks in order to ensure that the plantings are present # Bangs are used on the following 2 let blocks in order to ensure that the plantings are present
# in the database before the email is generated: otherwise, they won't be present in the email. # in the database before the email is generated: otherwise, they won't be present in the email.
let!(:p1) { FactoryBot.create(:predictable_planting, planted_at: 10.days.ago, garden: member.gardens.first, owner: member) } let!(:p1) { create(:predictable_planting, planted_at: 10.days.ago, garden: member.gardens.first, owner: member) }
let!(:p2) { FactoryBot.create(:predictable_planting, planted_at: 30.days.ago, garden: member.gardens.first, owner: member) } let!(:p2) { create(:predictable_planting, planted_at: 30.days.ago, garden: member.gardens.first, owner: member) }
describe "lists plantings" do describe "lists plantings" do
it { expect(mail).to have_content "Progress report" } it { expect(mail).to have_content "Progress report" }
@@ -50,10 +50,10 @@ describe "Planting reminder email", :js do
context "when member has some harvests" do context "when member has some harvests" do
# Bangs are used on the following 2 let blocks in order to ensure that the plantings are present # Bangs are used on the following 2 let blocks in order to ensure that the plantings are present
# in the database before the spec is run. # in the database before the spec is run.
let!(:p1) { FactoryBot.create(:predictable_planting, garden: member.gardens.first, owner: member, planted_at: 20.days.ago) } let!(:p1) { create(:predictable_planting, garden: member.gardens.first, owner: member, planted_at: 20.days.ago) }
let!(:p2) { FactoryBot.create(:predictable_planting, garden: member.gardens.first, owner: member) } let!(:p2) { create(:predictable_planting, garden: member.gardens.first, owner: member) }
let!(:h1) { FactoryBot.create(:harvest, owner: member, planting: p1, harvested_at: 1.day.ago) } let!(:h1) { create(:harvest, owner: member, planting: p1, harvested_at: 1.day.ago) }
let!(:h2) { FactoryBot.create(:harvest, owner: member, planting: p2, harvested_at: 3.days.ago) } let!(:h2) { create(:harvest, owner: member, planting: p2, harvested_at: 3.days.ago) }
describe "lists planting that are ready for harvest" do describe "lists planting that are ready for harvest" do
it { expect(mail).to have_content "Ready to harvest" } it { expect(mail).to have_content "Ready to harvest" }

View File

@@ -4,10 +4,10 @@ require "rails_helper"
require 'custom_matchers' require 'custom_matchers'
describe "Planting a crop", :js, :search do describe "Planting a crop", :js, :search do
let!(:maize) { FactoryBot.create(:maize) } let!(:maize) { create(:maize) }
let(:garden) { FactoryBot.create(:garden, owner: member, name: 'Orchard') } let(:garden) { create(:garden, owner: member, name: 'Orchard') }
let!(:planting) do let!(:planting) do
FactoryBot.create(:planting, garden:, owner: member, planted_at: Date.parse("2013-03-10")) create(:planting, garden:, owner: member, planted_at: Date.parse("2013-03-10"))
end end
before { Planting.reindex } before { Planting.reindex }
@@ -19,14 +19,14 @@ describe "Planting a crop", :js, :search do
it_behaves_like "crop suggest", "planting" it_behaves_like "crop suggest", "planting"
describe "displays required and optional fields properly" do describe "displays required and optional fields properly" do
it { expect(page).to have_selector ".required", text: "What did you plant?" } it { expect(page).to have_css ".required", text: "What did you plant?" }
it { expect(page).to have_selector ".required", text: "Where did you plant it?" } it { expect(page).to have_css ".required", text: "Where did you plant it?" }
it { expect(page).to have_selector 'input#planting_planted_at' } it { expect(page).to have_css 'input#planting_planted_at' }
it { expect(page).to have_selector 'input#planting_quantity' } it { expect(page).to have_css 'input#planting_quantity' }
it { expect(page).to have_selector 'select#planting_planted_from' } it { expect(page).to have_css 'select#planting_planted_from' }
it { expect(page).to have_selector 'select#planting_sunniness' } it { expect(page).to have_css 'select#planting_sunniness' }
it { expect(page).to have_selector 'textarea#planting_description' } it { expect(page).to have_css 'textarea#planting_description' }
it { expect(page).to have_selector 'input#planting_finished_at' } it { expect(page).to have_css 'input#planting_finished_at' }
end end
describe "Creating a new planting" do describe "Creating a new planting" do
@@ -237,7 +237,7 @@ describe "Planting a crop", :js, :search do
describe "Transplanting a planting" do describe "Transplanting a planting" do
it "allows transplanting to another garden" do it "allows transplanting to another garden" do
other_garden = FactoryBot.create(:garden, owner: member, name: 'Backyard') other_garden = create(:garden, owner: member, name: 'Backyard')
visit planting_path(planting) visit planting_path(planting)
click_link 'Actions' click_link 'Actions'
select other_garden.name, from: 'Transplant to:' select other_garden.name, from: 'Transplant to:'

View File

@@ -4,9 +4,9 @@ require "rails_helper"
require 'custom_matchers' require 'custom_matchers'
describe "Display a planting", :js do describe "Display a planting", :js do
describe 'planting perennial' do describe 'planting perennial' do
let(:garden) { FactoryBot.create(:garden, location: 'Edinburgh') } let(:garden) { create(:garden, location: 'Edinburgh') }
let(:crop) { FactoryBot.create(:crop, name: 'feijoa', perennial: true) } let(:crop) { create(:crop, name: 'feijoa', perennial: true) }
let(:planting) { FactoryBot.create(:planting, crop:, garden:, owner: garden.owner) } let(:planting) { create(:planting, crop:, garden:, owner: garden.owner) }
describe 'no harvest to predict from' do describe 'no harvest to predict from' do
before { visit planting_path(planting) } before { visit planting_path(planting) }
@@ -17,9 +17,9 @@ describe "Display a planting", :js do
describe 'harvests used to predict' do describe 'harvests used to predict' do
before do before do
FactoryBot.create(:harvest, planting:, crop:, harvested_at: '1 May 2019') create(:harvest, planting:, crop:, harvested_at: '1 May 2019')
FactoryBot.create(:harvest, planting:, crop:, harvested_at: '18 June 2019') create(:harvest, planting:, crop:, harvested_at: '18 June 2019')
FactoryBot.create_list(:harvest, 4, planting:, crop:, harvested_at: '18 August 2019') create_list(:harvest, 4, planting:, crop:, harvested_at: '18 August 2019')
end end
before { visit planting_path(planting) } before { visit planting_path(planting) }
@@ -36,22 +36,22 @@ describe "Display a planting", :js do
before do before do
# Near by planting with harvests # Near by planting with harvests
nearby_garden = FactoryBot.create(:garden, location: 'Greenwich, UK') nearby_garden = create(:garden, location: 'Greenwich, UK')
nearby_planting = FactoryBot.create(:planting, crop:, nearby_planting = create(:planting, crop:,
garden: nearby_garden, owner: nearby_garden.owner, planted_at: '1 January 2000') garden: nearby_garden, owner: nearby_garden.owner, planted_at: '1 January 2000')
FactoryBot.create(:harvest, planting: nearby_planting, crop:, create(:harvest, planting: nearby_planting, crop:,
harvested_at: '1 May 2019') harvested_at: '1 May 2019')
FactoryBot.create(:harvest, planting: nearby_planting, crop:, create(:harvest, planting: nearby_planting, crop:,
harvested_at: '18 June 2019') harvested_at: '18 June 2019')
FactoryBot.create_list(:harvest, 4, planting: nearby_planting, crop:, create_list(:harvest, 4, planting: nearby_planting, crop:,
harvested_at: '18 August 2008') harvested_at: '18 August 2008')
# far away planting harvests # far away planting harvests
faraway_garden = FactoryBot.create(:garden, location: 'Amundsen-Scott Base, Antarctica') faraway_garden = create(:garden, location: 'Amundsen-Scott Base, Antarctica')
faraway_planting = FactoryBot.create(:planting, garden: faraway_garden, crop:, faraway_planting = create(:planting, garden: faraway_garden, crop:,
owner: faraway_garden.owner, planted_at: '16 May 2001') owner: faraway_garden.owner, planted_at: '16 May 2001')
FactoryBot.create_list(:harvest, 4, planting: faraway_planting, crop:, create_list(:harvest, 4, planting: faraway_planting, crop:,
harvested_at: '18 December 2006') harvested_at: '18 December 2006')
end end

View File

@@ -8,25 +8,25 @@ describe "Display a planting", :js do
before { visit planting_path(planting) } before { visit planting_path(planting) }
context 'Perennial planted long ago' do context 'Perennial planted long ago' do
let(:planting) { FactoryBot.create(:perennial_planting) } let(:planting) { create(:perennial_planting) }
it { expect(page).to have_text 'Perennial' } it { expect(page).to have_text 'Perennial' }
end end
context 'Perennial finished' do context 'Perennial finished' do
let(:planting) { FactoryBot.create(:perennial_planting, planted_at: 6.years.ago, finished: true, finished_at: 1.year.ago) } let(:planting) { create(:perennial_planting, planted_at: 6.years.ago, finished: true, finished_at: 1.year.ago) }
it { expect(page).to have_text 'Perennial' } it { expect(page).to have_text 'Perennial' }
end end
context 'Annual no predictions' do context 'Annual no predictions' do
let(:planting) { FactoryBot.create(:annual_planting) } let(:planting) { create(:annual_planting) }
it { expect(page).to have_no_text 'Finish expected' } it { expect(page).to have_no_text 'Finish expected' }
end end
context 'Annual with predicted finish' do context 'Annual with predicted finish' do
let(:planting) { FactoryBot.create(:predictable_planting, planted_at: 2.weeks.ago) } let(:planting) { create(:predictable_planting, planted_at: 2.weeks.ago) }
it { expect(page).to have_text '28%' } it { expect(page).to have_text '28%' }
it { expect(page).to have_text '14/50 days' } it { expect(page).to have_text '14/50 days' }
@@ -35,39 +35,39 @@ describe "Display a planting", :js do
end end
context 'Annual finished' do context 'Annual finished' do
let(:planting) { FactoryBot.create(:annual_planting, planted_at: 100.days.ago, finished: true, finished_at: 1.day.ago) } let(:planting) { create(:annual_planting, planted_at: 100.days.ago, finished: true, finished_at: 1.day.ago) }
it { expect(page).to have_text "Planted #{I18n.l(planting.planted_at)}" } it { expect(page).to have_text "Planted #{I18n.l(planting.planted_at)}" }
end end
context 'Planting with harvests' do context 'Planting with harvests' do
let(:planting) { FactoryBot.create(:harvest_with_planting).planting } let(:planting) { create(:harvest_with_planting).planting }
it { expect(page).to have_text 'Harvest started' } it { expect(page).to have_text 'Harvest started' }
end end
context 'Planting with harvest predictable' do context 'Planting with harvest predictable' do
let(:planting) do let(:planting) do
crop = FactoryBot.create(:annual_crop) crop = create(:annual_crop)
# 50 days to harvest # 50 days to harvest
FactoryBot.create(:harvest, harvested_at: 150.days.ago, crop:, create(:harvest, harvested_at: 150.days.ago, crop:,
planting: FactoryBot.create(:planting, planted_at: 200.days.ago, crop:)) planting: create(:planting, planted_at: 200.days.ago, crop:))
# 20 days to harvest # 20 days to harvest
FactoryBot.create(:harvest, harvested_at: 180.days.ago, crop:, create(:harvest, harvested_at: 180.days.ago, crop:,
planting: FactoryBot.create(:planting, planted_at: 200.days.ago, crop:)) planting: create(:planting, planted_at: 200.days.ago, crop:))
# 10 days to harvest # 10 days to harvest
FactoryBot.create(:harvest, harvested_at: 190.days.ago, crop:, create(:harvest, harvested_at: 190.days.ago, crop:,
planting: FactoryBot.create(:planting, planted_at: 200.days.ago, crop:)) planting: create(:planting, planted_at: 200.days.ago, crop:))
crop.update_medians crop.update_medians
FactoryBot.create(:annual_planting, planted_at: 200.days.ago, crop:) create(:annual_planting, planted_at: 200.days.ago, crop:)
end end
it { expect(page).to have_text 'First harvest expected' } it { expect(page).to have_text 'First harvest expected' }
end end
context 'with quantity' do context 'with quantity' do
let(:planting) { FactoryBot.create(:planting, quantity: 100) } let(:planting) { create(:planting, quantity: 100) }
it { expect(find('.plantingfact--quantity')).to have_text '100' } it { expect(find('.plantingfact--quantity')).to have_text '100' }
end end
@@ -78,8 +78,8 @@ describe "Display a planting", :js do
before { visit planting_path(planting) } before { visit planting_path(planting) }
context 'with matching seeds' do context 'with matching seeds' do
let(:seed) { FactoryBot.create(:seed, saved_at: 1.month.ago, owner: member) } let(:seed) { create(:seed, saved_at: 1.month.ago, owner: member) }
let(:planting) { FactoryBot.create(:planting, planted_at: 1.day.ago, crop: seed.crop, owner: member) } let(:planting) { create(:planting, planted_at: 1.day.ago, crop: seed.crop, owner: member) }
it { expect(page).to have_text 'Is this from one of these plantings? ' } it { expect(page).to have_text 'Is this from one of these plantings? ' }

View File

@@ -15,16 +15,16 @@ describe "Seeds", :js, :search do
describe "displays required and optional fields properly" do describe "displays required and optional fields properly" do
# NOTE: The required behaviour is pushed down to the control itself, not the form-group as of rails 7.1. # NOTE: The required behaviour is pushed down to the control itself, not the form-group as of rails 7.1.
# Modern browsers enforce the required behaviour better than us doing it ourselves. # Modern browsers enforce the required behaviour better than us doing it ourselves.
it { expect(page).to have_selector "label", text: "Crop" } it { expect(page).to have_css "label", text: "Crop" }
it { expect(page).to have_selector 'input#seed_quantity' } it { expect(page).to have_css 'input#seed_quantity' }
it { expect(page).to have_selector 'input#seed_plant_before' } it { expect(page).to have_css 'input#seed_plant_before' }
it { expect(page).to have_selector 'input#seed_days_until_maturity_min' } it { expect(page).to have_css 'input#seed_days_until_maturity_min' }
it { expect(page).to have_selector 'input#seed_days_until_maturity_max' } it { expect(page).to have_css 'input#seed_days_until_maturity_max' }
it { expect(page).to have_selector 'label', text: 'Organic?' } it { expect(page).to have_css 'label', text: 'Organic?' }
it { expect(page).to have_selector 'label', text: 'GMO?' } it { expect(page).to have_css 'label', text: 'GMO?' }
it { expect(page).to have_selector 'label', text: 'Heirloom?' } it { expect(page).to have_css 'label', text: 'Heirloom?' }
it { expect(page).to have_selector 'textarea#seed_description' } it { expect(page).to have_css 'textarea#seed_description' }
it { expect(page).to have_selector 'label', text: 'Will trade' } it { expect(page).to have_css 'label', text: 'Will trade' }
end end
describe "Adding a new seed", :js do describe "Adding a new seed", :js do

View File

@@ -55,7 +55,7 @@ describe "seeds", :js do
end end
describe "delete seeds" do describe "delete seeds" do
let(:seed) { FactoryBot.create(:seed, owner: member) } let(:seed) { create(:seed, owner: member) }
before do before do
visit seed_path(seed) visit seed_path(seed)
@@ -72,25 +72,25 @@ describe "seeds", :js do
before { visit seed_path(seed) } before { visit seed_path(seed) }
describe "view seeds with max and min days until maturity" do describe "view seeds with max and min days until maturity" do
let(:seed) { FactoryBot.create(:seed, days_until_maturity_min: 5, days_until_maturity_max: 7) } let(:seed) { create(:seed, days_until_maturity_min: 5, days_until_maturity_max: 7) }
it { expect(find('.seedfacts--maturity')).to have_content("57") } it { expect(find('.seedfacts--maturity')).to have_content("57") }
end end
describe "view seeds with only max days until maturity" do describe "view seeds with only max days until maturity" do
let(:seed) { FactoryBot.create(:seed, days_until_maturity_max: 7) } let(:seed) { create(:seed, days_until_maturity_max: 7) }
it { expect(find('.seedfacts--maturity')).to have_content("7") } it { expect(find('.seedfacts--maturity')).to have_content("7") }
end end
describe "view seeds with only min days until maturity" do describe "view seeds with only min days until maturity" do
let(:seed) { FactoryBot.create(:seed, days_until_maturity_min: 5) } let(:seed) { create(:seed, days_until_maturity_min: 5) }
it { expect(find('.seedfacts--maturity')).to have_content("5") } it { expect(find('.seedfacts--maturity')).to have_content("5") }
end end
describe "view seeds with neither max nor min days until maturity" do describe "view seeds with neither max nor min days until maturity" do
let(:seed) { FactoryBot.create(:seed) } let(:seed) { create(:seed) }
it { expect(find('.seedfacts--maturity')).to have_content "unknown" } it { expect(find('.seedfacts--maturity')).to have_content "unknown" }
end end

View File

@@ -10,8 +10,8 @@ describe "Seeds", :js do
include_context 'signed in member' include_context 'signed in member'
before { visit seed_path(seed) } before { visit seed_path(seed) }
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
let!(:seed) { FactoryBot.create(:seed, owner: member) } let!(:seed) { create(:seed, owner: member) }
it { it {
click_on "Actions" click_on "Actions"
@@ -28,7 +28,7 @@ describe "Seeds", :js do
visit seed_path(seed) visit seed_path(seed)
end end
let!(:photo) { FactoryBot.create(:photo, title: 'hello photo', owner: seed.owner) } let!(:photo) { create(:photo, title: 'hello photo', owner: seed.owner) }
it { is_expected.to have_xpath("//img[contains(@src,'#{photo.thumbnail_url}')]") } it { is_expected.to have_xpath("//img[contains(@src,'#{photo.thumbnail_url}')]") }
it { is_expected.to have_xpath("//a[contains(@href,'#{photo_path(photo)}')]") } it { is_expected.to have_xpath("//a[contains(@href,'#{photo_path(photo)}')]") }
@@ -41,7 +41,7 @@ describe "Seeds", :js do
visit seed_path(seed) visit seed_path(seed)
end end
let!(:photos) { FactoryBot.create_list(:photo, 10 * 5, owner: seed.owner) } let!(:photos) { create_list(:photo, 10 * 5, owner: seed.owner) }
let(:newest_photo) { seed.photos.order(created_at: :desc, id: :desc).first } let(:newest_photo) { seed.photos.order(created_at: :desc, id: :desc).first }
let(:oldest_photo) { seed.photos.order(created_at: :desc, id: :desc).last } let(:oldest_photo) { seed.photos.order(created_at: :desc, id: :desc).last }

View File

@@ -9,7 +9,7 @@ shared_examples "crop suggest" do |resource|
let!(:roma) { create(:roma) } let!(:roma) { create(:roma) }
it "placeholder text in crop auto suggest field" do it "placeholder text in crop auto suggest field" do
expect(page).to have_selector("input[placeholder='e.g. lettuce']") expect(page).to have_css("input[placeholder='e.g. lettuce']")
end end
it "typing in the crop name displays suggestions" do it "typing in the crop name displays suggestions" do
@@ -41,7 +41,7 @@ shared_examples "crop suggest" do |resource|
select_from_autocomplete("pear") select_from_autocomplete("pear")
expect(page).to have_selector("input##{resource}_crop_id[value='#{pear.id}']", visible: false) expect(page).to have_css("input##{resource}_crop_id[value='#{pear.id}']", visible: false)
end end
it "Typing and pausing does not affect input" do it "Typing and pausing does not affect input" do

View File

@@ -3,12 +3,12 @@
require 'rails_helper' require 'rails_helper'
describe "signin" do describe "signin" do
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
let(:recipient) { FactoryBot.create(:member) } let(:recipient) { create(:member) }
let(:wrangler) { FactoryBot.create(:crop_wrangling_member) } let(:wrangler) { create(:crop_wrangling_member) }
before do before do
crop = FactoryBot.create(:tomato) crop = create(:tomato)
crop.reindex crop.reindex
end end

View File

@@ -34,15 +34,15 @@ describe "signout" do
end end
describe 'after signout, redirect to signin page if page needs authentication' do describe 'after signout, redirect to signin page if page needs authentication' do
include_examples "sign-in redirects", "/plantings/new" it_behaves_like "sign-in redirects", "/plantings/new"
include_examples "sign-in redirects", "/harvests/new" it_behaves_like "sign-in redirects", "/harvests/new"
include_examples "sign-in redirects", "/posts/new" it_behaves_like "sign-in redirects", "/posts/new"
include_examples "sign-in redirects", "/gardens/new" it_behaves_like "sign-in redirects", "/gardens/new"
include_examples "sign-in redirects", "/seeds/new" it_behaves_like "sign-in redirects", "/seeds/new"
end end
it 'photos' do it 'photos' do
garden = FactoryBot.create(:garden, owner: member) garden = create(:garden, owner: member)
visit "/photos/new?id=#{garden.id}&type=garden" visit "/photos/new?id=#{garden.id}&type=garden"
expect(page).to have_current_path new_member_session_path, ignore_query: true expect(page).to have_current_path new_member_session_path, ignore_query: true
# expect(page).to have_http_status(200) # expect(page).to have_http_status(200)

View File

@@ -16,22 +16,15 @@ describe "signup" do
end end
it "sign up for new account with existing username" do it "sign up for new account with existing username" do
visit crops_path # something other than front page, which has multiple signup links create(:member, login_name: 'person123')
click_link 'Sign up' visit new_member_registration_path
fill_in 'Login name', with: 'person123' fill_in 'Login name', with: 'person123'
fill_in 'Email', with: 'gardener@example.com' fill_in 'Email', with: 'gardener2@example.com'
fill_in 'Password', with: 'abc123'
fill_in 'Password confirmation', with: 'abc123'
check 'member_tos_agreement'
click_button 'Sign up'
expect(page).to have_current_path root_path, ignore_query: true
first('.signup a').click # click the 'Sign up' button in the middle of the page
fill_in 'Login name', with: 'person123'
fill_in 'Email', with: 'gardener@example.com'
fill_in 'Password', with: 'abc123' fill_in 'Password', with: 'abc123'
fill_in 'Password confirmation', with: 'abc123' fill_in 'Password confirmation', with: 'abc123'
check 'member_tos_agreement' check 'member_tos_agreement'
click_button 'Sign up' click_button 'Sign up'
expect(page).to have_content 'has already been taken'
end end
it "sign up for new account without accepting TOS" do it "sign up for new account without accepting TOS" do

View File

@@ -3,9 +3,9 @@
require 'rails_helper' require 'rails_helper'
describe "timeline", :js do describe "timeline", :js do
let(:member) { FactoryBot.create(:member) } let(:member) { create(:member) }
let(:friend1) { FactoryBot.create(:member) } let(:friend1) { create(:member) }
let(:friend2) { FactoryBot.create(:member) } let(:friend2) { create(:member) }
before do before do
member.followed << friend1 member.followed << friend1
@@ -13,14 +13,14 @@ describe "timeline", :js do
end end
describe 'visit timeline' do describe 'visit timeline' do
let!(:friend_planting) { FactoryBot.create(:planting, owner: friend1, planted_at: 1.day.ago) } let!(:friend_planting) { create(:planting, owner: friend1, planted_at: 1.day.ago) }
let!(:friend_harvest) { FactoryBot.create(:planting, owner: friend2, planted_at: 3.years.ago) } let!(:friend_harvest) { create(:planting, owner: friend2, planted_at: 3.years.ago) }
let!(:finished_planting) { FactoryBot.create(:finished_planting, owner: friend1) } let!(:finished_planting) { create(:finished_planting, owner: friend1) }
let!(:no_planted_at_planting) { FactoryBot.create(:planting, owner: friend2, planted_at: nil) } let!(:no_planted_at_planting) { create(:planting, owner: friend2, planted_at: nil) }
let!(:friend_photo) { FactoryBot.create(:photo, owner: friend1) } let!(:friend_photo) { create(:photo, owner: friend1) }
let!(:friend_post) { FactoryBot.create(:post, author: friend2) } let!(:friend_post) { create(:post, author: friend2) }
let!(:liked_post) { FactoryBot.create(:like, likeable: friend_photo, member: friend2) } let!(:liked_post) { create(:like, likeable: friend_photo, member: friend2) }
let!(:liked_photo) { FactoryBot.create(:like, likeable: friend_post, member: friend1) } let!(:liked_photo) { create(:like, likeable: friend_post, member: friend1) }
before do before do
login_as(member) login_as(member)

View File

@@ -13,7 +13,7 @@ describe ApplicationHelper do
describe '#avatar_uri' do describe '#avatar_uri' do
context 'with a normal user' do context 'with a normal user' do
before do before do
@member = FactoryBot.build(:member, email: 'example@example.com', preferred_avatar_uri: nil) @member = build(:member, email: 'example@example.com', preferred_avatar_uri: nil)
end end
it 'renders a gravatar uri' do it 'renders a gravatar uri' do
@@ -27,7 +27,7 @@ describe ApplicationHelper do
context 'with a user who specified a preferred avatar uri' do context 'with a user who specified a preferred avatar uri' do
before do before do
@member = FactoryBot.build(:member, email: 'example@example.com', preferred_avatar_uri: 'http://media.catmoji.com/post/ujg/cat-in-hat.jpg') @member = build(:member, email: 'example@example.com', preferred_avatar_uri: 'http://media.catmoji.com/post/ujg/cat-in-hat.jpg')
end end
it 'renders a the specified uri' do it 'renders a the specified uri' do

View File

@@ -15,10 +15,10 @@ require 'rails_helper'
RSpec.describe ButtonsHelper, type: :helper do RSpec.describe ButtonsHelper, type: :helper do
before { allow(self).to receive(:can?).and_return(true) } before { allow(self).to receive(:can?).and_return(true) }
let(:garden) { FactoryBot.create(:garden) } let(:garden) { create(:garden) }
let(:planting) { FactoryBot.create(:planting) } let(:planting) { create(:planting) }
let(:harvest) { FactoryBot.create(:harvest) } let(:harvest) { create(:harvest) }
let(:seed) { FactoryBot.create(:seed) } let(:seed) { create(:seed) }
describe 'add_photo_button' do describe 'add_photo_button' do
it { expect(add_photo_button(garden)).to include "/photos/new?id=#{garden.id}&amp;type=garden" } it { expect(add_photo_button(garden)).to include "/photos/new?id=#{garden.id}&amp;type=garden" }

View File

@@ -5,12 +5,12 @@ require 'rails_helper'
RSpec.describe EventHelper, type: :helper do RSpec.describe EventHelper, type: :helper do
subject { resolve_model(event) } subject { resolve_model(event) }
let(:planting) { FactoryBot.create(:planting) } let(:planting) { create(:planting) }
let(:harvest) { FactoryBot.create(:harvest) } let(:harvest) { create(:harvest) }
let(:seed) { FactoryBot.create(:seed) } let(:seed) { create(:seed) }
let(:post) { FactoryBot.create(:post) } let(:post) { create(:post) }
let(:comment) { FactoryBot.create(:comment) } let(:comment) { create(:comment) }
let(:photo) { FactoryBot.create(:photo) } let(:photo) { create(:photo) }
describe 'plantings' do describe 'plantings' do
let(:event) { OpenStruct.new(id: planting.id, event_type: 'planting') } let(:event) { OpenStruct.new(id: planting.id, event_type: 'planting') }

View File

@@ -5,29 +5,29 @@ require 'rails_helper'
describe GardensHelper do describe GardensHelper do
describe "garden description" do describe "garden description" do
it "is missing" do it "is missing" do
garden = FactoryBot.create(:garden, garden = create(:garden,
description: nil) description: nil)
result = helper.display_garden_description(garden) result = helper.display_garden_description(garden)
expect(result).to eq "no description provided." expect(result).to eq "no description provided."
end end
it "is less than 130 characters long" do it "is less than 130 characters long" do
garden = FactoryBot.create(:garden, garden = create(:garden,
description: 'a' * 20) description: 'a' * 20)
result = helper.display_garden_description(garden) result = helper.display_garden_description(garden)
expect(result).to eq 'a' * 20 expect(result).to eq 'a' * 20
end end
it "is 130 characters long" do it "is 130 characters long" do
garden = FactoryBot.create(:garden, garden = create(:garden,
description: 'a' * 130) description: 'a' * 130)
result = helper.display_garden_description(garden) result = helper.display_garden_description(garden)
expect(result).to eq 'a' * 130 expect(result).to eq 'a' * 130
end end
it "is more than 130 characters long" do it "is more than 130 characters long" do
garden = FactoryBot.create(:garden, garden = create(:garden,
description: 'a' * 140) description: 'a' * 140)
result = helper.display_garden_description(garden) result = helper.display_garden_description(garden)
expect(result).to eq ('a' * 126) + '...' + ' ' + link_to("Read more", garden_path(garden)) expect(result).to eq ('a' * 126) + '...' + ' ' + link_to("Read more", garden_path(garden))
end end
@@ -40,8 +40,8 @@ describe GardensHelper do
end end
it "has 1 planting" do it "has 1 planting" do
crop = FactoryBot.create(:crop) crop = create(:crop)
plantings = [FactoryBot.create(:planting, quantity: 10, crop:)] plantings = [create(:planting, quantity: 10, crop:)]
result = helper.display_garden_plantings(plantings) result = helper.display_garden_plantings(plantings)
output = '<ul class="plantings"><li>' output = '<ul class="plantings"><li>'
@@ -54,11 +54,11 @@ describe GardensHelper do
it "has 2 plantings" do it "has 2 plantings" do
plantings = [] plantings = []
crop1 = FactoryBot.create(:crop) crop1 = create(:crop)
plantings << FactoryBot.create(:planting, quantity: 10, crop: crop1) plantings << create(:planting, quantity: 10, crop: crop1)
crop2 = FactoryBot.create(:crop) crop2 = create(:crop)
plantings << FactoryBot.create(:planting, quantity: 10, crop: crop2) plantings << create(:planting, quantity: 10, crop: crop2)
result = helper.display_garden_plantings(plantings.first(2)) result = helper.display_garden_plantings(plantings.first(2))
@@ -76,14 +76,14 @@ describe GardensHelper do
it "has 3 plantings" do it "has 3 plantings" do
plantings = [] plantings = []
crop1 = FactoryBot.create(:crop) crop1 = create(:crop)
plantings << FactoryBot.create(:planting, quantity: 10, crop: crop1) plantings << create(:planting, quantity: 10, crop: crop1)
crop2 = FactoryBot.create(:crop) crop2 = create(:crop)
plantings << FactoryBot.create(:planting, quantity: 10, crop: crop2) plantings << create(:planting, quantity: 10, crop: crop2)
crop3 = FactoryBot.create(:crop) crop3 = create(:crop)
plantings << FactoryBot.create(:planting, quantity: 10, crop: crop3) plantings << create(:planting, quantity: 10, crop: crop3)
result = helper.display_garden_plantings(plantings.first(2)) result = helper.display_garden_plantings(plantings.first(2))

View File

@@ -5,66 +5,66 @@ require 'rails_helper'
describe HarvestsHelper do describe HarvestsHelper do
describe "display_quantity" do describe "display_quantity" do
it "blank" do it "blank" do
harvest = FactoryBot.create(:harvest, harvest = create(:harvest,
quantity: nil, quantity: nil,
weight_quantity: nil) weight_quantity: nil)
result = helper.display_quantity(harvest) result = helper.display_quantity(harvest)
result.should eq 'not specified' result.should eq 'not specified'
end end
it '3 individual' do it '3 individual' do
harvest = FactoryBot.create(:harvest, harvest = create(:harvest,
quantity: 3, quantity: 3,
unit: 'individual', unit: 'individual',
weight_quantity: nil) weight_quantity: nil)
result = helper.display_quantity(harvest) result = helper.display_quantity(harvest)
result.should eq '3' result.should eq '3'
end end
it '1 bunch' do it '1 bunch' do
harvest = FactoryBot.create(:harvest, harvest = create(:harvest,
quantity: 1, quantity: 1,
unit: 'bunch', unit: 'bunch',
weight_quantity: nil) weight_quantity: nil)
result = helper.display_quantity(harvest) result = helper.display_quantity(harvest)
result.should eq '1 bunch' result.should eq '1 bunch'
end end
it '3 bunches' do it '3 bunches' do
harvest = FactoryBot.create(:harvest, harvest = create(:harvest,
quantity: 3, quantity: 3,
unit: 'bunch', unit: 'bunch',
weight_quantity: nil) weight_quantity: nil)
result = helper.display_quantity(harvest) result = helper.display_quantity(harvest)
result.should eq '3 bunches' result.should eq '3 bunches'
end end
it '3 kg' do it '3 kg' do
harvest = FactoryBot.create(:harvest, harvest = create(:harvest,
quantity: nil, quantity: nil,
unit: nil, unit: nil,
weight_quantity: 3, weight_quantity: 3,
weight_unit: 'kg') weight_unit: 'kg')
result = helper.display_quantity(harvest) result = helper.display_quantity(harvest)
result.should eq '3 kg' result.should eq '3 kg'
end end
it '3 individual weighing 3 kg' do it '3 individual weighing 3 kg' do
harvest = FactoryBot.create(:harvest, harvest = create(:harvest,
quantity: 3, quantity: 3,
unit: 'individual', unit: 'individual',
weight_quantity: 3, weight_quantity: 3,
weight_unit: 'kg') weight_unit: 'kg')
result = helper.display_quantity(harvest) result = helper.display_quantity(harvest)
result.should eq '3, weighing 3 kg' result.should eq '3, weighing 3 kg'
end end
it '3 bunches weighing 3 kg' do it '3 bunches weighing 3 kg' do
harvest = FactoryBot.create(:harvest, harvest = create(:harvest,
quantity: 3, quantity: 3,
unit: 'bunch', unit: 'bunch',
weight_quantity: 3, weight_quantity: 3,
weight_unit: 'kg') weight_unit: 'kg')
result = helper.display_quantity(harvest) result = helper.display_quantity(harvest)
result.should eq '3 bunches, weighing 3 kg' result.should eq '3 bunches, weighing 3 kg'
end end

View File

@@ -3,17 +3,17 @@
require 'rails_helper' require 'rails_helper'
describe PhotosHelper do describe PhotosHelper do
let(:crop) { FactoryBot.create(:crop) } let(:crop) { create(:crop) }
let(:crop_photo_of) { FactoryBot.create(:photo, source: 'openfarm') } let(:crop_photo_of) { create(:photo, source: 'openfarm') }
let(:crop_photo_flickr) { FactoryBot.create(:photo, source: 'flickr') } let(:crop_photo_flickr) { create(:photo, source: 'flickr') }
let(:garden) { FactoryBot.create(:garden) } let(:garden) { create(:garden) }
let(:planting) { FactoryBot.create(:planting, crop:, owner: garden.owner) } let(:planting) { create(:planting, crop:, owner: garden.owner) }
let(:planting_photo) { FactoryBot.create(:photo, owner: garden.owner) } let(:planting_photo) { create(:photo, owner: garden.owner) }
let(:harvest) { FactoryBot.create(:harvest, crop:, owner: garden.owner) } let(:harvest) { create(:harvest, crop:, owner: garden.owner) }
let(:harvest_photo) { FactoryBot.create(:photo, owner: garden.owner) } let(:harvest_photo) { create(:photo, owner: garden.owner) }
let(:seed) { FactoryBot.create(:seed, crop:, owner: garden.owner) } let(:seed) { create(:seed, crop:, owner: garden.owner) }
let(:seed_photo) { FactoryBot.create(:photo, owner: garden.owner) } let(:seed_photo) { create(:photo, owner: garden.owner) }
describe "crops" do describe "crops" do
subject { crop_image_path(crop) } subject { crop_image_path(crop) }
@@ -51,7 +51,7 @@ describe PhotosHelper do
it { is_expected.to eq 'placeholder_600.png' } it { is_expected.to eq 'placeholder_600.png' }
describe "has a flickr photo" do describe "has a flickr photo" do
let(:garden_photo) { FactoryBot.create(:photo, owner: garden.owner, source: 'flickr') } let(:garden_photo) { create(:photo, owner: garden.owner, source: 'flickr') }
before { garden.photos << garden_photo } before { garden.photos << garden_photo }

View File

@@ -4,41 +4,41 @@ require 'rails_helper'
describe PlantingsHelper do describe PlantingsHelper do
describe "display_planting" do describe "display_planting" do
let!(:member) { FactoryBot.build(:member, login_name: 'crop_lady') } let!(:member) { build(:member, login_name: 'crop_lady') }
it "does not have a quantity nor a planted from value provided" do it "does not have a quantity nor a planted from value provided" do
planting = FactoryBot.build(:planting, planting = build(:planting,
quantity: nil, quantity: nil,
planted_from: '', planted_from: '',
owner: member) owner: member)
result = helper.display_planting(planting) result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted magic bean." expect(result).to eq "crop_lady planted magic bean."
end end
it "does not have a quantity provided" do it "does not have a quantity provided" do
planting = FactoryBot.build(:planting, planting = build(:planting,
quantity: nil, quantity: nil,
planted_from: 'seed', planted_from: 'seed',
owner: member) owner: member)
result = helper.display_planting(planting) result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted seeds." expect(result).to eq "crop_lady planted seeds."
end end
context "when quantity is greater than 1" do context "when quantity is greater than 1" do
it "does not have a planted from value provided" do it "does not have a planted from value provided" do
planting = FactoryBot.build(:planting, planting = build(:planting,
quantity: 10, quantity: 10,
planted_from: '', planted_from: '',
owner: member) owner: member)
result = helper.display_planting(planting) result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted 10 units." expect(result).to eq "crop_lady planted 10 units."
end end
it "does have a planted from value provided" do it "does have a planted from value provided" do
planting = FactoryBot.build(:planting, planting = build(:planting,
quantity: 5, quantity: 5,
planted_from: 'seed', planted_from: 'seed',
owner: member) owner: member)
result = helper.display_planting(planting) result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted 5 seeds." expect(result).to eq "crop_lady planted 5 seeds."
end end
@@ -46,19 +46,19 @@ describe PlantingsHelper do
context "when quantity is 1" do context "when quantity is 1" do
it "does not have a planted from value provided" do it "does not have a planted from value provided" do
planting = FactoryBot.build(:planting, planting = build(:planting,
quantity: 1, quantity: 1,
planted_from: '', planted_from: '',
owner: member) owner: member)
result = helper.display_planting(planting) result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted 1 unit." expect(result).to eq "crop_lady planted 1 unit."
end end
it "does have a planted from value provided" do it "does have a planted from value provided" do
planting = FactoryBot.build(:planting, planting = build(:planting,
quantity: 1, quantity: 1,
planted_from: 'seed', planted_from: 'seed',
owner: member) owner: member)
result = helper.display_planting(planting) result = helper.display_planting(planting)
expect(result).to eq "crop_lady planted 1 seed." expect(result).to eq "crop_lady planted 1 seed."
end end

View File

@@ -5,29 +5,29 @@ require 'rails_helper'
describe SeedsHelper do describe SeedsHelper do
describe "seed description" do describe "seed description" do
it "is missing" do it "is missing" do
seed = FactoryBot.create(:seed, seed = create(:seed,
description: nil) description: nil)
result = helper.display_seed_description(seed) result = helper.display_seed_description(seed)
expect(result).to eq "" expect(result).to eq ""
end end
it "is less than 130 characters long" do it "is less than 130 characters long" do
seed = FactoryBot.create(:seed, seed = create(:seed,
description: 'a' * 20) description: 'a' * 20)
result = helper.display_seed_description(seed) result = helper.display_seed_description(seed)
expect(result).to eq 'a' * 20 expect(result).to eq 'a' * 20
end end
it "is 130 characters long" do it "is 130 characters long" do
seed = FactoryBot.create(:seed, seed = create(:seed,
description: 'a' * 130) description: 'a' * 130)
result = helper.display_seed_description(seed) result = helper.display_seed_description(seed)
expect(result).to eq 'a' * 130 expect(result).to eq 'a' * 130
end end
it "is more than 130 characters long" do it "is more than 130 characters long" do
seed = FactoryBot.create(:seed, seed = create(:seed,
description: 'a' * 140) description: 'a' * 140)
result = helper.display_seed_description(seed) result = helper.display_seed_description(seed)
expect(result).to eq ('a' * 126) + '...' + ' ' + link_to("Read more", seed_path(seed)) expect(result).to eq ('a' * 126) + '...' + ' ' + link_to("Read more", seed_path(seed))
end end

Some files were not shown because too many files have changed in this diff Show More