Этот коммит содержится в:
Mattia Roccoberton
2021-05-23 14:23:19 +02:00
родитель d41f8450ea
Коммит 9b460d36e3
7 изменённых файлов: 85 добавлений и 39 удалений

Просмотреть файл

@@ -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'

Просмотреть файл

@@ -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

Просмотреть файл

@@ -1,3 +1,5 @@
Rails.application.routes.draw do
ActiveAdmin.routes(self)
root to: redirect('/admin')
end

Просмотреть файл

@@ -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

Просмотреть файл

@@ -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"

41
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.'

Просмотреть файл

@@ -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 '<p>Some content...more text</p>'
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 '<p>Some content...<strong>more text</strong></p>'
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 '<p>Some content...<em>more text</em></p>'
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 '<p>Some content...<strong>more text</strong></p>'
expect(post.summary).to eq '<p><em>Summary text</em></p>'
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"