capybara_active_admin 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ffad605d6aa8c00d8bd2c3e52a6e951965adca36ec416e73051793b163d83757
4
- data.tar.gz: 68b2c38a0fe0ee8f711cad15982495e3d5f6680a284c65232d5ffefa05ae9aad
3
+ metadata.gz: b4c255bc74004f32015b353e3e06e0915d8bbc40b3109ad02cbe831eebb8b31f
4
+ data.tar.gz: c20f9d6fc40394244c59a00ee41db8836286eb96bf766c14a8ac4042d6db868b
5
5
  SHA512:
6
- metadata.gz: 63dfa20b4d356d3759617a2c81ee57dd06bddc4beefdc3b4cdefa650a5a116687ec9ad108fbd494a6e83b1b0447f893175cc7b72f27438c48fc8d76ba060e8f7
7
- data.tar.gz: 1b67771979a8b8ab0e255112bf585eb97611226b08fa258debc409042803a022d81a5b74539d1839b14011d2cbfc00ab5f7404c0092c458d11f9974a87a39af9
6
+ metadata.gz: 7bcf06a3023243b731c03b26643e6007ab679830af7cf27db6962b5513ac11125f9a6573f78fa296e2eeced96ea9ebd3f7af20a55de35090e6611e9e91a3a6e1
7
+ data.tar.gz: e307113050bcee41a41c1d1d4742b3fb5c904ae351977b3964d7c05897837b4a354d12453acacdb5edb29c5895d00f69a9d163f1b2e72248cf1dd81dd2d8a072
data/.gitignore CHANGED
@@ -13,3 +13,7 @@
13
13
  .rspec_status
14
14
 
15
15
  Gemfile.lock
16
+
17
+ # docs
18
+ /docs/.vuepress/dist/
19
+ /node_modules/
data/.travis.yml CHANGED
@@ -1,12 +1,44 @@
1
1
  ---
2
+ # test config on https://config.travis-ci.com/explore
2
3
  language: ruby
3
4
  cache: bundler
5
+ before_install:
6
+ - gem install bundler -v 2.1.4
7
+ stages:
8
+ - test
9
+ - deploy
4
10
  jobs:
5
11
  include:
6
- - rvm: 2.5.7
12
+ - name: "Test Ruby-2.5.7 Rails-6.0"
13
+ stage: test
14
+ rvm: 2.5.7
7
15
  env: RAILS_VERSION="~> 6.0"
8
- - rvm: 2.5.7
9
- env: RAILS_VERSION="~> 5.0"
10
- - rvm: 2.3.8
16
+ before_script: bundle install
17
+ script: bundle exec rake default
18
+ - name: "Test Ruby-2.5.7 Rails-5.2"
19
+ stage: test
20
+ rvm: 2.5.7
11
21
  env: RAILS_VERSION="~> 5.2"
12
- before_install: gem install bundler -v 2.1.4
22
+ before_script: bundle install
23
+ script: bundle exec rake default
24
+ - name: "Test Ruby-2.3.8 Rails-5.2"
25
+ stage: test
26
+ rvm: 2.3.8
27
+ env: RAILS_VERSION="~> 5.2"
28
+ before_script: bundle install
29
+ script: bundle exec rake default
30
+ - name: "Deploy documentation"
31
+ stage: deploy
32
+ install: skip
33
+ before_script: yarn install
34
+ script: yarn docs:build
35
+ deploy:
36
+ provider: pages
37
+ edge: true
38
+ verbose: true
39
+ cleanup: false
40
+ local_dir: docs/.vuepress/dist
41
+ token: $GITHUB_TOKEN
42
+ keep_history: true
43
+ on:
44
+ branch: master
data/CHANGELOG.md CHANGED
@@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.3.2] - 2020-04-16
10
+ ### Changed
11
+ - remove model_name from table related DSL arguments
12
+ - improve API
13
+
9
14
  ## [0.3.1] - 2020-04-15
10
15
  ### Added
11
16
  - `within_attribute_row` finder
data/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # Capybara Active Admin
2
2
 
3
- [![Build Status](https://travis-ci.com/activeadmin-plugins/capybara_active_admin.svg?branch=master)](https://travis-ci.com/activeadmin-plugins/capybara_active_admin)
3
+ [![Build Status](https://travis-ci.com/activeadmin-plugins/capybara_active_admin.svg?branch=master)](https://travis-ci.com/activeadmin-plugins/capybara_active_admin) [![Gem Version](https://badge.fury.io/rb/capybara_active_admin.svg)](https://badge.fury.io/rb/capybara_active_admin) [![Downloads](https://img.shields.io/gem/dt/capybara_active_admin)](https://rubygems.org/gems/capybara_active_admin) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
4
4
 
5
5
  Capybara DSL for fast and easy testing Active Admin applications.
6
6
 
7
+ Check out our docs at [activeadmin-plugins.github.io/capybara_active_admin](https://activeadmin-plugins.github.io/capybara_active_admin)
8
+
7
9
  ## Installation
8
10
 
9
11
  Add this line to your application's Gemfile:
data/deploy.sh ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env sh
2
+
3
+ # abort on errors
4
+ set -e
5
+
6
+ # build
7
+ npm run docs:build
8
+
9
+ # navigate into the build output directory
10
+ cd docs/.vuepress/dist
11
+
12
+ git init
13
+ git add -A
14
+ git commit -m 'deploy'
15
+
16
+ # deploying to https://activeadmin-plugins.github.io/capybara_active_admin
17
+ git push -f git@github.com:activeadmin-plugins/capybara_active_admin.git master:gh-pages
18
+
19
+ cd -
@@ -0,0 +1,11 @@
1
+ module.exports = {
2
+ title: 'Capybara Active Admin',
3
+ description: 'Capybara DSL for fast and easy testing Active Admin applications.',
4
+ base: '/capybara_active_admin/',
5
+ themeConfig: {
6
+ nav: [
7
+ { text: 'Guide', link: '/guide/' },
8
+ { text: 'GitHub', link: 'https://github.com/activeadmin-plugins/capybara_active_admin' }
9
+ ]
10
+ }
11
+ }
@@ -0,0 +1,3 @@
1
+ div.theme-default-content:not(.custom) {
2
+ max-width: 75%;
3
+ }
data/docs/README.md ADDED
@@ -0,0 +1,41 @@
1
+ ---
2
+ home: true
3
+ actionText: Get Started →
4
+ actionLink: /guide/
5
+ footer: MIT Licensed | Copyright © 2020-present Denis Talakevich
6
+ ---
7
+
8
+ <div style="text-align: center">
9
+ <Bit/>
10
+ </div>
11
+
12
+ <div class="features">
13
+ <div class="feature">
14
+ <h2>Fast Test Writing</h2>
15
+ <p>Allow to focus on what you want to test instead of how to do it.</p>
16
+ </div>
17
+ <div class="feature">
18
+ <h2>Simplicity</h2>
19
+ <p>Following Ruby an Capybara naming conventions allows easily to read and understand tests code.</p>
20
+ </div>
21
+ <div class="feature">
22
+ <h2>Customizable</h2>
23
+ <p>You can easy extend, customize, and mix parts of library to fit your needs.</p>
24
+ </div>
25
+ </div>
26
+
27
+ ### As Easy as 1, 2, 3
28
+
29
+ ```bash
30
+ # install
31
+ gem install capybara_active_admin
32
+ # OR echo "gem 'capybara_active_admin', group: :test, require: false" >> Gemfile
33
+ ```
34
+ ```ruby
35
+ # require in in rspec/rails_helper.rb
36
+ require 'capybara/active_admin/rspec'
37
+ ```
38
+
39
+ ::: warning COMPATIBILITY NOTE
40
+ requires Ruby >= 2.3.
41
+ :::
@@ -0,0 +1,113 @@
1
+ # Introduction
2
+
3
+ <Bit/>
4
+
5
+ `Capybara::ActiveAdmin` created to write tests as fast as `ActiveAdmin` resource which they are test.
6
+
7
+ ## Getting Started
8
+
9
+ ### Installation
10
+
11
+ ```ruby
12
+ # Gemfile
13
+
14
+ gem 'capybara_active_admin', group: :test, require: false
15
+ ```
16
+
17
+ ```ruby
18
+ # spec/rails_helper.rb
19
+
20
+ # after require 'rspec' or 'rspec/rails'
21
+ require 'capybara/active_admin/rspec'
22
+ ```
23
+
24
+ ### Usage
25
+
26
+ For example we have such database table
27
+ ```ruby
28
+ create_table :users do |t|
29
+ t.string :full_name
30
+ t.timestamps
31
+ end
32
+ ```
33
+ And such `ActiveRecord` model
34
+ ```ruby
35
+ class User < ActiveRecord::Base
36
+ validates :full_name, presence: true
37
+ end
38
+ ```
39
+ And there is our `ActiveAdmin` resource
40
+ ```ruby
41
+ ActiveAdmin.register User do
42
+ permit_params :full_name
43
+ end
44
+ ```
45
+
46
+ Our test can look like below
47
+ ```ruby
48
+ # spec/system/users_spec.rb
49
+
50
+ RSpec.describe 'Users' do
51
+
52
+ describe 'index page' do
53
+ subject do
54
+ visit admin_users_path
55
+ end
56
+
57
+ it 'have no table' do
58
+ subject
59
+
60
+ expect(page).to have_text('There are no Users yet.')
61
+ expect(page).to have_action_item('New User')
62
+ expect(page).to_not have_action_item('Edit User')
63
+ expect(page).to_not have_table
64
+ end
65
+
66
+ context 'with users' do
67
+ let!(:users) do
68
+ [
69
+ User.create!(full_name: 'John Doe'),
70
+ User.create!(full_name: 'Jane Air')
71
+ ]
72
+ end
73
+
74
+ it 'have correct table rows' do
75
+ subject
76
+
77
+ # you can check that table is visible on page
78
+ expect(page).to have_table
79
+
80
+ # checkout data within table,
81
+ # same as `within(table_selector) do`
82
+ within_table_for do
83
+ # check how many rows in table (tr)
84
+ expect(page).to have_table_row(count: 2)
85
+ # or cells (td)
86
+ expect(page).to have_table_cell(count: 10)
87
+ # or check cell of specific column contain specific value,
88
+ # accepts same options as `have_selector`, such as :text, :exact_text, :count, etc.
89
+ expect(page).to have_table_cell(text: 'John Doe', column: 'Full Name')
90
+
91
+ # we can check data inside specific row by record id,
92
+ # or we can find it by index in table `within_table_row(index: 0) do`.
93
+ within_table_row(id: users.first.id) do
94
+ # default columns for users table are id, full_name, created_at, updated_at, actions.
95
+ expect(page).to have_table_cell(count: 5)
96
+ expect(page).to have_table_cell(text: 'John Doe')
97
+ # or you can write
98
+ expect(page).to have_table_cell(text: 'John Doe', column: 'Full Name')
99
+ # negate matcher
100
+ expect(page).to_not have_table_cell(text: 'John Doe', column: 'Id')
101
+ end
102
+
103
+ within_table_row(id: users.second.id) do
104
+ expect(page).to have_table_cell(text: users.second.id, column: 'Id')
105
+ expect(page).to have_table_cell(text: 'Jane Air', column: 'Full Name')
106
+ expect(page).to_not have_table_cell(text: 'John Doe')
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ ```
@@ -3,6 +3,7 @@
3
3
  module Capybara
4
4
  module ActiveAdmin
5
5
  module Actions
6
+ # Actions for common Active Admin components.
6
7
  module Layout
7
8
  def click_action_item(title, options = {})
8
9
  within(action_items_container_selector) do
@@ -7,9 +7,12 @@ require 'capybara/active_admin/finders/form'
7
7
 
8
8
  module Capybara
9
9
  module ActiveAdmin
10
+ # Finders are methods that find DOM element(s) or change current scope to node element.
11
+ #
12
+ # Find element(s) method names should start with *find_*.
13
+ #
14
+ # Change current scope method names should start with *within_*.
10
15
  module Finders
11
- # Finders are methods that find node element(s) or change current scope to node element.
12
-
13
16
  include Finders::Layout
14
17
  include Finders::Table
15
18
  include Finders::AttributesTable
@@ -3,15 +3,21 @@
3
3
  module Capybara
4
4
  module ActiveAdmin
5
5
  module Finders
6
+ # Finder methods for ActiveAdmin attributes_table_for can be found here.
7
+ # @see Capybara::ActiveAdmin::Finders base finders module.
6
8
  module AttributesTable
7
- # @param model_name [Class<Object>, nil] model name or class.
8
- # @param record_id [String, Numeric, nil]
9
- # @yield within attributes table
10
- def within_attributes_table_for(model_name, record_id = nil)
11
- selector = attributes_table_selector(model_name, record_id)
9
+ # Calls block within attributes table.
10
+ # @param model [Class<Object>, nil] model name or class.
11
+ # @param id [String, Numeric, nil] record ID.
12
+ # @yield within attributes table.
13
+ def within_attributes_table_for(model: nil, id: nil)
14
+ selector = attributes_table_selector(model: model, id: id)
12
15
  within(selector) { yield }
13
16
  end
14
17
 
18
+ # Calls block within attributes table row.
19
+ # @param label [String] row label.
20
+ # @yield within attributes table.
15
21
  def within_attribute_row(label)
16
22
  selector = attributes_row_selector(label)
17
23
  within(selector) { yield }
@@ -3,17 +3,17 @@
3
3
  module Capybara
4
4
  module ActiveAdmin
5
5
  module Finders
6
+ # Finders for *active_admin_form_for* and related form components.
6
7
  module Form
7
- # @param name [Class<Object>, String] form record class or model name
8
+ # @param model_name [Class<Object>, String, nil] form record class or model name (default nil).
8
9
  # @yield within form
9
- def within_form_for(name)
10
- name = name.model_name.singular if name.is_a?(Class)
11
- selector = form_selector(name)
10
+ def within_form_for(model_name = nil)
11
+ selector = form_selector(model_name)
12
12
  within(selector) { yield }
13
13
  end
14
14
 
15
15
  # @param association_name [String]
16
- # @param index [String] index of fieldset, starts with 0.
16
+ # @param index [String] index of fieldset, starts with 0 (default 0).
17
17
  # @yield within fieldset>ol
18
18
  def within_form_has_many(association_name, index: 0)
19
19
  selector = has_many_fields_selector(association_name)
@@ -22,6 +22,7 @@ module Capybara
22
22
  within(fieldset) { yield }
23
23
  end
24
24
 
25
+ # @yield within filters container.
25
26
  def within_filters
26
27
  selector = filter_form_selector
27
28
  within(selector) { yield }
@@ -3,6 +3,7 @@
3
3
  module Capybara
4
4
  module ActiveAdmin
5
5
  module Finders
6
+ # Finders for common Active Admin components.
6
7
  module Layout
7
8
  def find_footer(options = {})
8
9
  selector = footer_selector
@@ -3,26 +3,14 @@
3
3
  module Capybara
4
4
  module ActiveAdmin
5
5
  module Finders
6
+ # Finders for *table_for*, it's rows and cells.
6
7
  module Table
7
- def current_table_model_name
8
- @__current_table_model_name
9
- end
10
-
11
- # @param model_name [Class<#model_name>, String] records class or model name to match rows.
12
8
  # @param resource_name [String, nil] resource name of index page.
13
9
  # @yield within table
14
- def within_table_for(model_name, resource_name = nil)
10
+ def within_table_for(resource_name = nil)
15
11
  selector = table_selector(resource_name)
16
12
 
17
- within(selector) do
18
- old = @__current_table_model_name
19
- @__current_table_model_name = model_name
20
- begin
21
- yield
22
- ensure
23
- @__current_table_model_name = old
24
- end
25
- end
13
+ within(selector) { yield }
26
14
  end
27
15
 
28
16
  # id [String, Integer, nil] record ID.
@@ -38,11 +26,11 @@ module Capybara
38
26
  raise ArgumentError, 'must provide :id or :index' if id.nil? && index.nil?
39
27
 
40
28
  if id
41
- selector = table_row_selector(current_table_model_name, id)
29
+ selector = table_row_selector(id)
42
30
  return find(selector)
43
31
  end
44
32
 
45
- selector = table_row_selector(nil, nil)
33
+ selector = table_row_selector(nil)
46
34
  find_all(selector, minimum: index + 1)[index]
47
35
  end
48
36
 
@@ -5,9 +5,9 @@ module Capybara
5
5
  module Matchers
6
6
  module AttributesTable
7
7
  def have_attributes_table(options = {})
8
- model_name = options.delete(:model)
9
- record_id = options.delete(:id)
10
- selector = attributes_table_selector(model_name, record_id)
8
+ model = options.delete(:model)
9
+ id = options.delete(:id)
10
+ selector = attributes_table_selector(model: model, id: id)
11
11
  have_selector(selector, options)
12
12
  end
13
13