docbrown/spec/models/organization_spec.rb
Andy Zhao 68807c6df7 Allow Organizations to Update Slug/Username (#1411)
* Close anchor tag typo

* Remove confusing message in profile

* Fix typo in spec

* Add old_slug and old_old_slug fields to org

* Test for check_for_slug_change method

* Add ability for orgs to change slug

* Update copy to match new org language

* Add redirect for organizations with old slugs

* Use less queries for handling org/user redirect

* Use consistent syntax for user creation

* Test for organization slug redirects

* Refactor user article redirect
2019-01-10 14:16:43 -05:00

129 lines
3.7 KiB
Ruby

require "rails_helper"
RSpec.describe Organization, type: :model do
let(:user) { create(:user) }
let(:organization) { create(:organization) }
describe "#name" do
it "rejects names with over 50 characters" do
organization.name = Faker::Lorem.characters(51)
expect(organization).not_to be_valid
end
it "accepts names with 50 or less characters" do
expect(organization).to be_valid
end
end
describe "#summary" do
it "rejects summaries with over 1000 characters" do
organization.summary = Faker::Lorem.characters(1001)
expect(organization).not_to be_valid
end
it "accepts summaries with 1000 or less characters" do
expect(organization).to be_valid
end
end
describe "#text_color_hex" do
it "accepts hex color codes" do
organization.text_color_hex = Faker::Color.hex_color
expect(organization).to be_valid
end
it "rejects color names" do
organization.text_color_hex = Faker::Color.color_name
expect(organization).not_to be_valid
end
it "rejects RGB colors" do
organization.text_color_hex = Faker::Color.rgb_color
expect(organization).not_to be_valid
end
it "rejects wrong color format" do
organization.text_color_hex = "##{Faker::Lorem.words(4)}"
expect(organization).not_to be_valid
end
end
describe "#slug" do
it "accepts properly formatted slug" do
organization.slug = "heyho"
expect(organization).to be_valid
end
it "accepts properly formatted slug with numbers" do
organization.slug = "HeyHo2"
expect(organization).to be_valid
end
it "rejects slug with spaces" do
organization.slug = "hey ho"
expect(organization).not_to be_valid
end
it "rejects slug with unacceptable character" do
organization.slug = "Hey&Ho"
expect(organization).not_to be_valid
end
it "downcases slug" do
organization.slug = "HaHaHa"
organization.save
expect(organization.slug).to eq("hahaha")
end
end
describe "#url" do
it "accepts valid http url" do
organization.url = "http://ben.com"
expect(organization).to be_valid
end
it "accepts valid secure http url" do
organization.url = "https://ben.com"
expect(organization).to be_valid
end
it "rejects invalid http url" do
organization.url = "ben.com"
expect(organization).not_to be_valid
end
end
describe "#check_for_slug_change" do
def create_article_for_organization
user.update(organization_id: organization.id, org_admin: true)
create(:article, organization_id: organization.id, user_id: user.id)
end
it "properly updates the slug/username" do
random_new_slug = "slug_#{rand(10000)}"
organization.update(slug: random_new_slug)
expect(organization.slug).to eq random_new_slug
end
it "updates old_slug to original slug if slug was changed" do
original_slug = organization.slug
organization.update(slug: "slug_#{rand(10000)}")
expect(organization.old_slug).to eq original_slug
end
it "updates old_old_slug properly if slug was changed and there was an old_slug" do
original_slug = organization.slug
organization.update(slug: "something_else")
organization.update(slug: "another_slug")
expect(organization.old_old_slug).to eq original_slug
end
it "updates the paths of the organization's articles" do
create_article_for_organization
new_slug = "slug_#{rand(10000)}"
organization.update(slug: new_slug)
article = Article.find_by(organization_id: organization.id)
expect(article.path).to include new_slug
end
end
end