diff --git a/bin/rails b/bin/rails index 7fd59cc..ea1edbc 100755 --- a/bin/rails +++ b/bin/rails @@ -1,29 +1,16 @@ #!/usr/bin/env ruby -# frozen_string_literal: true +# This command will automatically be run when you run "rails" with Rails gems +# installed from the root of your application. -# -# This file was generated by Bundler. -# -# The application 'rails' is installed as part of a gem, and -# this file is here to facilitate running it. -# +ENV['RAILS_ENV'] ||= 'test' -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) +ENGINE_ROOT = File.expand_path('..', __dir__) +ENGINE_PATH = File.expand_path('../lib/activeadmin/quill_editor/engine', __dir__) +APP_PATH = File.expand_path('../spec/dummy/config/application', __dir__) -bundle_binstub = File.expand_path("../bundle", __FILE__) +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) -if File.file?(bundle_binstub) - if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ - load(bundle_binstub) - else - abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. -Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") - end -end - -require "rubygems" -require "bundler/setup" - -load Gem.bin_path("railties", "rails") +require 'rails/all' +require 'rails/engine/commands' diff --git a/spec/dummy/app/admin/posts.rb b/spec/dummy/app/admin/posts.rb index f600562..7588c96 100644 --- a/spec/dummy/app/admin/posts.rb +++ b/spec/dummy/app/admin/posts.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true ActiveAdmin.register Post do - permit_params :author_id, :title, :description, :category, :dt, :position, :published, tag_ids: [] + permit_params :author_id, :title, :summary, :description, :category, :dt, :position, :published, tag_ids: [] index do selectable_column @@ -17,6 +17,7 @@ ActiveAdmin.register Post do attributes_table do row :author row :title + row :summary row :description row :category row :dt @@ -42,6 +43,7 @@ ActiveAdmin.register Post do f.inputs 'Post' do f.input :author f.input :title + f.input :summary, as: :quill_editor, input_html: { data: { options: { modules: { toolbar: toolbar } } } } f.input :description, as: :quill_editor, input_html: { data: { options: { modules: { toolbar: toolbar } } } } f.input :category f.input :dt diff --git a/spec/dummy/config/routes.rb b/spec/dummy/config/routes.rb index 36d2dac..93f6d83 100644 --- a/spec/dummy/config/routes.rb +++ b/spec/dummy/config/routes.rb @@ -1,3 +1,5 @@ Rails.application.routes.draw do ActiveAdmin.routes(self) + + root to: redirect('/admin') end diff --git a/spec/dummy/db/migrate/20180607053739_create_posts.rb b/spec/dummy/db/migrate/20180607053739_create_posts.rb index 305a66d..c6a9322 100644 --- a/spec/dummy/db/migrate/20180607053739_create_posts.rb +++ b/spec/dummy/db/migrate/20180607053739_create_posts.rb @@ -4,6 +4,7 @@ class CreatePosts < ActiveRecord::Migration[5.2] def change create_table :posts do |t| t.string :title + t.text :summary t.text :description t.belongs_to :author, foreign_key: true t.string :category diff --git a/spec/dummy/db/schema.rb b/spec/dummy/db/schema.rb index 15beb10..dd072f2 100644 --- a/spec/dummy/db/schema.rb +++ b/spec/dummy/db/schema.rb @@ -2,8 +2,8 @@ # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. # -# This file is the source Rails uses to define your schema when running `rails -# db:schema:load`. When creating a new database, `rails db:schema:load` tends to +# This file is the source Rails uses to define your schema when running `bin/rails +# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to # be faster and is potentially less error prone than running all of your # migrations from scratch. Old migrations may fail to apply correctly if those # migrations use external dependencies or application code. @@ -16,9 +16,9 @@ ActiveRecord::Schema.define(version: 2018_06_07_053739) do t.string "namespace" t.text "body" t.string "resource_type" - t.integer "resource_id" + t.bigint "resource_id" t.string "author_type" - t.integer "author_id" + t.bigint "author_id" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["author_type", "author_id"], name: "index_active_admin_comments_on_author_type_and_author_id" @@ -66,6 +66,7 @@ ActiveRecord::Schema.define(version: 2018_06_07_053739) do create_table "posts", force: :cascade do |t| t.string "title" + t.text "summary" t.text "description" t.integer "author_id" t.string "category" diff --git a/spec/dummy/db/seeds.rb b/spec/dummy/db/seeds.rb new file mode 100644 index 0000000..38505e0 --- /dev/null +++ b/spec/dummy/db/seeds.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +puts 'Seeds:' + +puts 'Tags...' +(11..16).each do |i| + Tag.find_or_create_by!(name: "Tag #{i}") +end + +puts 'Authors...' +(11..20).each do |i| + age = 21 + 3 * (i - 10) + attrs = { name: "Author #{i}", age: age, email: "some@email#{i}.com" } + Author.find_or_create_by!(attrs) do |author| + author.profile = Profile.new(description: "Profile description for Author #{i}") if (i % 3).zero? + end +end + +puts 'Posts...' +authors = Author.pluck(:id) +tags = Tag.where.not(name: 'A test tag').pluck(:id) +(11..40).each do |i| + attrs = { + title: "Post #{i}", + author_id: authors.sample, + position: rand(100), + created_at: Time.now - rand(3600).seconds + } + attrs[:category] = 'news' if (i % 4).zero? + attrs[:dt] = Time.now - rand(30).days if (i % 3).zero? + + Post.find_or_create_by!(title: "Post #{i}") do |post| + post.assign_attributes(attrs) + post.tags = Tag.where(id: tags.sample(2)) if (i % 2).zero? + end +end + +Author.find_or_create_by!(name: 'A test author', email: 'aaa@bbb.ccc', age: 30) +Tag.find_or_create_by!(name: 'A test tag') + +puts 'done.' diff --git a/spec/system/quill_editor_spec.rb b/spec/system/quill_editor_spec.rb index 5505ae4..282df2a 100644 --- a/spec/system/quill_editor_spec.rb +++ b/spec/system/quill_editor_spec.rb @@ -2,16 +2,7 @@ RSpec.describe 'Quill editor', type: :system do let(:author) { Author.create!(email: 'some_email@example.com', name: 'John Doe', age: 30) } - let(:post) { Post.create!(title: 'Test', author: author, description: 'Some content...') } - - before do - post - end - - after do - Post.delete_all - author.delete - end + let!(:post) { Post.create!(title: 'Test', author: author, description: 'Some content...') } context 'with a Quill editor' do it 'initialize the editor' do @@ -30,6 +21,7 @@ RSpec.describe 'Quill editor', type: :system do find('#post_description_input .ql-editor').click find('#post_description_input .ql-editor').base.send_keys('more text') find('[type="submit"]').click + expect(page).to have_content('was successfully updated') expect(post.reload.description).to eq '

Some content...more text

' end @@ -41,6 +33,7 @@ RSpec.describe 'Quill editor', type: :system do find('#post_description_input .ql-toolbar .ql-bold').click find('#post_description_input .ql-editor').base.send_keys('more text') find('[type="submit"]').click + expect(post.reload.description).to eq '

Some content...more text

' end @@ -51,10 +44,29 @@ RSpec.describe 'Quill editor', type: :system do find('#post_description_input .ql-toolbar .ql-italic').click find('#post_description_input .ql-editor').base.send_keys('more text') find('[type="submit"]').click + expect(post.reload.description).to eq '

Some content...more text

' end end + context 'with 2 Quill editors' do + it 'updates some HTML content for 2 fields' do + visit "/admin/posts/#{post.id}/edit" + + find('#post_description_input .ql-editor').click + find('#post_description_input .ql-toolbar .ql-bold').click + find('#post_description_input .ql-editor').base.send_keys('more text') + find('#post_summary_input .ql-editor').click + find('#post_summary_input .ql-toolbar .ql-italic').click + find('#post_summary_input .ql-editor').base.send_keys('Summary text') + find('[type="submit"]').click + post.reload + + expect(post.description).to eq '

Some content...more text

' + expect(post.summary).to eq '

Summary text

' + end + end + context 'with a Quill editor in a nested resource' do it 'updates some HTML content of a new nested resource' do visit "/admin/authors/#{author.id}/edit"