Do not allow creation of groups with empty names
This commit is contained in:
parent
da25be15b1
commit
477ec3e9c9
1
Gemfile
1
Gemfile
|
@ -92,6 +92,7 @@ group :development, :test do
|
||||||
gem 'rake'
|
gem 'rake'
|
||||||
gem 'puma'
|
gem 'puma'
|
||||||
gem 'rspec-rails', '~> 3.9'
|
gem 'rspec-rails', '~> 3.9'
|
||||||
|
gem 'rspec-its', '~> 1.3'
|
||||||
gem 'factory_bot_rails', require: false
|
gem 'factory_bot_rails', require: false
|
||||||
gem 'faker'
|
gem 'faker'
|
||||||
gem 'capybara'
|
gem 'capybara'
|
||||||
|
|
|
@ -388,6 +388,9 @@ GEM
|
||||||
rspec-expectations (3.9.1)
|
rspec-expectations (3.9.1)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.9.0)
|
rspec-support (~> 3.9.0)
|
||||||
|
rspec-its (1.3.0)
|
||||||
|
rspec-core (>= 3.0.0)
|
||||||
|
rspec-expectations (>= 3.0.0)
|
||||||
rspec-mocks (3.9.1)
|
rspec-mocks (3.9.1)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.9.0)
|
rspec-support (~> 3.9.0)
|
||||||
|
@ -556,6 +559,7 @@ DEPENDENCIES
|
||||||
redcarpet
|
redcarpet
|
||||||
redis
|
redis
|
||||||
rolify (~> 5.2)
|
rolify (~> 5.2)
|
||||||
|
rspec-its (~> 1.3)
|
||||||
rspec-rails (~> 3.9)
|
rspec-rails (~> 3.9)
|
||||||
ruby-progressbar
|
ruby-progressbar
|
||||||
sanitize
|
sanitize
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Group < ApplicationRecord
|
class Group < ApplicationRecord
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
has_many :group_members, dependent: :destroy
|
has_many :group_members, dependent: :destroy
|
||||||
|
|
||||||
|
validates :name, length: { minimum: 1 }
|
||||||
validates :display_name, length: { maximum: 30 }
|
validates :display_name, length: { maximum: 30 }
|
||||||
|
|
||||||
before_validation do
|
before_validation do
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe(Group, type: :model) do
|
||||||
|
let(:user) { FactoryBot.build(:user) }
|
||||||
|
|
||||||
|
describe 'name mangling' do
|
||||||
|
subject do
|
||||||
|
Group.new(user: user, display_name: display_name).tap(&:validate)
|
||||||
|
end
|
||||||
|
|
||||||
|
{
|
||||||
|
'great group' => 'great-group',
|
||||||
|
'followers' => '-followers-',
|
||||||
|
' followers ' => '-followers-',
|
||||||
|
" the game \t\nyes" => 'the-game-yes',
|
||||||
|
|
||||||
|
# not nice, but this is just the way it is:
|
||||||
|
"\u{1f98a} :3" => '3',
|
||||||
|
"\u{1f98a}" => ''
|
||||||
|
}.each do |display_name, expected_name|
|
||||||
|
context "when display name is #{display_name.inspect}" do
|
||||||
|
let(:display_name) { display_name }
|
||||||
|
|
||||||
|
its(:name) { should eq expected_name }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'validations' do
|
||||||
|
subject do
|
||||||
|
Group.new(user: user, display_name: display_name).validate
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when display name is 'great group' (valid)" do
|
||||||
|
let(:display_name) { 'great group' }
|
||||||
|
|
||||||
|
it { is_expected.to be true }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when display name is '1' (valid)" do
|
||||||
|
let(:display_name) { '1' }
|
||||||
|
|
||||||
|
it { is_expected.to be true }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when display name is the letter E 621 times (invalid, too long)' do
|
||||||
|
let(:display_name) { 'E' * 621 }
|
||||||
|
|
||||||
|
it { is_expected.to be false }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when display name is an empty string (invalid, as `name` would be empty)' do
|
||||||
|
let(:display_name) { '' }
|
||||||
|
|
||||||
|
it { is_expected.to be false }
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when display name is \u{1f98a} (invalid, as `name` would be empty)" do
|
||||||
|
let(:display_name) { "\u{1f98a}" }
|
||||||
|
|
||||||
|
it { is_expected.to be false }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -8,6 +8,7 @@ abort("The Rails environment is running in production mode!") if Rails.env.produ
|
||||||
require "spec_helper"
|
require "spec_helper"
|
||||||
require "rspec/rails"
|
require "rspec/rails"
|
||||||
# Add additional requires below this line. Rails is not loaded until this point!
|
# Add additional requires below this line. Rails is not loaded until this point!
|
||||||
|
require "rspec/its"
|
||||||
require "devise"
|
require "devise"
|
||||||
require "capybara/rails"
|
require "capybara/rails"
|
||||||
require "capybara/rspec"
|
require "capybara/rspec"
|
||||||
|
|
Loading…
Reference in New Issue