Commit ef74a65612bb7da52ae2dcb58a8c0005cbb32c6a

Authored by Rodrigo Souto
1 parent 93103d85

[licenses] Creating Linsese model and its relations

(ActionItem2379)
app/models/article.rb
... ... @@ -30,6 +30,8 @@ class Article < ActiveRecord::Base
30 30  
31 31 belongs_to :reference_article, :class_name => "Article", :foreign_key => 'reference_article_id'
32 32  
  33 + belongs_to :license
  34 +
33 35 has_many :translations, :class_name => 'Article', :foreign_key => :translation_of_id
34 36 belongs_to :translation_of, :class_name => 'Article', :foreign_key => :translation_of_id
35 37 before_destroy :rotate_translations
... ...
app/models/environment.rb
... ... @@ -158,6 +158,7 @@ class Environment < ActiveRecord::Base
158 158 has_many :products, :through => :enterprises
159 159 has_many :people
160 160 has_many :communities
  161 + has_many :licenses
161 162  
162 163 has_many :categories
163 164 has_many :display_categories, :class_name => 'Category', :conditions => 'display_color is not null and parent_id is null', :order => 'display_color'
... ...
app/models/license.rb 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +class License < ActiveRecord::Base
  2 + belongs_to :environment
  3 + has_many :content, :class_name => 'Article', :foreign_key => 'license_id'
  4 +
  5 + validates_presence_of :name, :environment
  6 + validates_presence_of :slug, :if => lambda {|license| license.name.present?}
  7 + validates_uniqueness_of :slug
  8 +
  9 + before_validation do |license|
  10 + license.slug ||= license.name.to_slug if license.name.present?
  11 + end
  12 +end
... ...
db/migrate/20120713073641_create_licenses.rb 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +class CreateLicenses < ActiveRecord::Migration
  2 + def self.up
  3 + create_table :licenses do |t|
  4 + t.string :name, :null => false
  5 + t.string :slug, :null => false
  6 + t.string :url
  7 + t.references :environment, :null => false
  8 + end
  9 + end
  10 +
  11 + def self.down
  12 + drop_table :licenses
  13 + end
  14 +end
... ...
db/migrate/20120713082741_add_license_to_article.rb 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +class AddLicenseToArticle < ActiveRecord::Migration
  2 + def self.up
  3 + add_column :articles, :license_id, :integer
  4 + add_column :article_versions, :license_id, :integer
  5 + end
  6 +
  7 + def self.down
  8 + remove_column :articles, :license_id
  9 + remove_column :article_versions, :license_id
  10 + end
  11 +end
... ...
test/functional/cms_controller_test.rb
... ... @@ -1542,6 +1542,17 @@ class CmsControllerTest &lt; ActionController::TestCase
1542 1542 assert_includes special_article_types, Float
1543 1543 end
1544 1544  
  1545 + should 'be able to define license when updating article' do
  1546 + article = fast_create(Article, :profile_id => profile.id)
  1547 + license = License.create!(:name => 'GPLv3', :environment => profile.environment)
  1548 + login_as(profile.identifier)
  1549 +
  1550 + post :edit, :profile => profile.identifier, :id => article.id, :article => { :license_id => license.id }
  1551 +
  1552 + article.reload
  1553 + assert_equal license, article.license
  1554 + end
  1555 +
1545 1556 protected
1546 1557  
1547 1558 # FIXME this is to avoid adding an extra dependency for a proper JSON parser.
... ...
test/unit/article_test.rb
... ... @@ -1671,4 +1671,10 @@ class ArticleTest &lt; ActiveSupport::TestCase
1671 1671 assert !a.allow_edit?(nil)
1672 1672 end
1673 1673  
  1674 + should 'be able to have a license' do
  1675 + license = License.create!(:name => 'GPLv3', :environment => Environment.default)
  1676 + article = Article.new(:license_id => license.id)
  1677 + assert_equal license, article.license
  1678 + end
  1679 +
1674 1680 end
... ...
test/unit/environment_test.rb
... ... @@ -1204,4 +1204,18 @@ class EnvironmentTest &lt; ActiveSupport::TestCase
1204 1204 should 'have production costs' do
1205 1205 assert_respond_to Environment.default, :production_costs
1206 1206 end
  1207 +
  1208 + should 'be able to have many licenses' do
  1209 + environment = Environment.default
  1210 + another_environment = fast_create(Environment)
  1211 + l1 = License.create!(:name => 'GPLv3', :environment => environment)
  1212 + l2 = License.create!(:name => 'AGPL', :environment => environment)
  1213 + l3 = License.create!(:name => 'Apache', :environment => another_environment)
  1214 +
  1215 + environment.reload
  1216 +
  1217 + assert_includes environment.licenses, l1
  1218 + assert_includes environment.licenses, l2
  1219 + assert_not_includes environment.licenses, l3
  1220 + end
1207 1221 end
... ...
test/unit/license_test.rb 0 → 100644
... ... @@ -0,0 +1,32 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class LicenseTest < ActiveSupport::TestCase
  4 + should 'validate presence of name, slug and enviornment' do
  5 + license = License.new
  6 + license.valid?
  7 + assert license.errors.invalid?(:name)
  8 + assert license.errors.invalid?(:slug)
  9 + assert license.errors.invalid?(:environment)
  10 +
  11 + license.name = 'GPLv3'
  12 + license.slug = 'gplv3'
  13 + license.environment = Environment.default
  14 + license.valid?
  15 + assert !license.errors.invalid?(:name)
  16 + assert !license.errors.invalid?(:slug)
  17 + assert !license.errors.invalid?(:environment)
  18 + end
  19 +
  20 + should 'fill in slug before creation' do
  21 + license = License.new(:name => 'GPLv3', :environment => Environment.default)
  22 + assert license.valid?
  23 + assert_equal license.name.to_slug, license.slug
  24 + end
  25 +
  26 + should 'not overwrite slug if it is already fill' do
  27 + license = License.new(:name => 'GPLv3', :slug => 'some-slug', :environment => Environment.default)
  28 + license.valid?
  29 + assert_equal 'some-slug', license.slug
  30 + end
  31 +end
  32 +
... ...