Commit bc0a550617d0d9c5b65d881e866dbbbd33dff9c4
1 parent
8880af6d
Exists in
master
and in
19 other branches
Validates presence of license on software_info
* Add a migration to fix softwares with no license * Add validates presence of license on software_info * Add test to not save software_info without license Signed-off-by: Gabriel Silva <gabriel93.silva@gmail.com> Signed-off-by: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com> Signed-off-by: Omar Junior <omarroinuj@gmail.com> Signed-off-by: Pedro de Lyra <pedrodelyra@gmail.com>
Showing
7 changed files
with
103 additions
and
31 deletions
Show diff stats
src/noosfero-spb/software_communities/db/migrate/20160112191716_add_license_to_softwares_with_none.rb
0 → 100644
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +class AddLicenseToSoftwaresWithNone < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + execute("UPDATE software_infos SET license_info_id=(SELECT id FROM license_infos WHERE version='Another') WHERE license_info_id IS NULL;") | ||
4 | + end | ||
5 | + | ||
6 | + def down | ||
7 | + say "This migration can't be reverted" | ||
8 | + end | ||
9 | +end |
src/noosfero-spb/software_communities/lib/software_info.rb
@@ -84,11 +84,12 @@ class SoftwareInfo < ActiveRecord::Base | @@ -84,11 +84,12 @@ class SoftwareInfo < ActiveRecord::Base | ||
84 | validates_length_of :finality, :maximum => 4000 | 84 | validates_length_of :finality, :maximum => 4000 |
85 | validates_length_of :objectives, :maximum => 4000 | 85 | validates_length_of :objectives, :maximum => 4000 |
86 | validates_length_of :features, :maximum => 4000 | 86 | validates_length_of :features, :maximum => 4000 |
87 | - validates_presence_of :finality, :community | 87 | + validates_presence_of :finality, :community, :license_info |
88 | 88 | ||
89 | validate :validate_acronym | 89 | validate :validate_acronym |
90 | 90 | ||
91 | - settings_items :another_license_version, :another_license_link | 91 | + settings_items :another_license_version, :default => 'Another' |
92 | + settings_items :another_license_link, :default => '#' | ||
92 | settings_items :sisp, :default => false | 93 | settings_items :sisp, :default => false |
93 | 94 | ||
94 | serialize :agency_identification | 95 | serialize :agency_identification |
@@ -136,16 +137,14 @@ class SoftwareInfo < ActiveRecord::Base | @@ -136,16 +137,14 @@ class SoftwareInfo < ActiveRecord::Base | ||
136 | } | 137 | } |
137 | 138 | ||
138 | def license_info | 139 | def license_info |
139 | - license = LicenseInfo.find_by_id self.license_info_id | ||
140 | license_another = LicenseInfo.find_by_version("Another") | 140 | license_another = LicenseInfo.find_by_version("Another") |
141 | 141 | ||
142 | - if license_another && license.id == license_another.id | ||
143 | - LicenseInfo.new( | ||
144 | - :version => self.another_license_version, | ||
145 | - :link => self.another_license_link | ||
146 | - ) | 142 | + if license_another && self.license_info_id == license_another.id |
143 | + license_another.version = self.another_license_version | ||
144 | + license_another.link = self.another_license_link | ||
145 | + license_another | ||
147 | else | 146 | else |
148 | - license | 147 | + super |
149 | end | 148 | end |
150 | end | 149 | end |
151 | 150 |
src/noosfero-spb/software_communities/test/functional/software_communities_plugin_myprofile_controller_test.rb
@@ -54,7 +54,9 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -54,7 +54,9 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
54 | :license => fields[0], | 54 | :license => fields[0], |
55 | :software_info => fields[2] | 55 | :software_info => fields[2] |
56 | ) | 56 | ) |
57 | - assert_equal SoftwareInfo.last.community.name, "Debian" | 57 | + |
58 | + new_software = Community.find_by_identifier("debian").software_info | ||
59 | + assert_equal new_software.community.name, "Debian" | ||
58 | end | 60 | end |
59 | 61 | ||
60 | should 'edit a new software adding basic information' do | 62 | should 'edit a new software adding basic information' do |
@@ -76,7 +78,9 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -76,7 +78,9 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
76 | :language => {}, | 78 | :language => {}, |
77 | :database => {} | 79 | :database => {} |
78 | ) | 80 | ) |
79 | - assert_equal SoftwareInfo.last.repository_link, "www.github.com/test" | 81 | + |
82 | + edited_software = Community.find_by_identifier("debian").software_info | ||
83 | + assert_equal edited_software.repository_link, "www.github.com/test" | ||
80 | end | 84 | end |
81 | 85 | ||
82 | should 'edit a new software adding specific information' do | 86 | should 'edit a new software adding specific information' do |
@@ -98,7 +102,9 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -98,7 +102,9 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
98 | :software => fields[4], | 102 | :software => fields[4], |
99 | :license => fields[5] | 103 | :license => fields[5] |
100 | ) | 104 | ) |
101 | - assert_equal SoftwareInfo.last.acronym, "test" | 105 | + |
106 | + edited_software = Community.find_by_identifier("debian").software_info | ||
107 | + assert_equal edited_software.acronym, "test" | ||
102 | end | 108 | end |
103 | 109 | ||
104 | should 'non admin cant edit a new software' do | 110 | should 'non admin cant edit a new software' do |
@@ -124,6 +130,32 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -124,6 +130,32 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
124 | assert_response 302 | 130 | assert_response 302 |
125 | end | 131 | end |
126 | 132 | ||
133 | + should 'edit a software and does not change Another License values' do | ||
134 | + another_license = LicenseInfo.create(:version => "Another", :link => "#") | ||
135 | + software = create_software(software_fields) | ||
136 | + software.community.add_admin(@person) | ||
137 | + software.save! | ||
138 | + | ||
139 | + post( | ||
140 | + :edit_software, | ||
141 | + :profile => software.community.identifier, | ||
142 | + :license => { "license_infos_id"=>another_license.id, "version"=>"Another Version", "link"=>"www.link.com" }, | ||
143 | + :software => {}, | ||
144 | + :library => {}, | ||
145 | + :operating_system => {}, | ||
146 | + :language => {}, | ||
147 | + :database => {} | ||
148 | + ) | ||
149 | + | ||
150 | + another_license.reload | ||
151 | + edited_software = Community.find_by_identifier("debian").software_info | ||
152 | + | ||
153 | + assert_equal edited_software.another_license_version, "Another Version" | ||
154 | + assert_equal edited_software.another_license_link, "www.link.com" | ||
155 | + assert_equal another_license.version, "Another" | ||
156 | + assert_equal another_license.link, "#" | ||
157 | + end | ||
158 | + | ||
127 | should 'only admin upgrade a generic software to a public software' do | 159 | should 'only admin upgrade a generic software to a public software' do |
128 | admin_person = create_user('admin').person | 160 | admin_person = create_user('admin').person |
129 | @environment.add_admin(admin_person) | 161 | @environment.add_admin(admin_person) |
@@ -142,7 +174,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -142,7 +174,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
142 | :software => fields[4], | 174 | :software => fields[4], |
143 | ) | 175 | ) |
144 | 176 | ||
145 | - assert SoftwareInfo.last.public_software? | 177 | + edited_software = Community.find_by_identifier("debian").software_info |
178 | + assert edited_software.public_software? | ||
146 | end | 179 | end |
147 | 180 | ||
148 | should 'not upgrade a generic software to a public software if user is not an admin' do | 181 | should 'not upgrade a generic software to a public software if user is not an admin' do |
@@ -158,7 +191,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -158,7 +191,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
158 | :software => fields[4] | 191 | :software => fields[4] |
159 | ) | 192 | ) |
160 | 193 | ||
161 | - refute SoftwareInfo.last.public_software? | 194 | + edited_software = Community.find_by_identifier("debian").software_info |
195 | + refute edited_software.public_software? | ||
162 | end | 196 | end |
163 | 197 | ||
164 | ["e_ping","e_mag","icp_brasil","e_arq","intern"].map do |attr| | 198 | ["e_ping","e_mag","icp_brasil","e_arq","intern"].map do |attr| |
@@ -176,7 +210,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -176,7 +210,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
176 | :software => fields[4] | 210 | :software => fields[4] |
177 | ) | 211 | ) |
178 | 212 | ||
179 | - refute SoftwareInfo.last.send(attr) | 213 | + edited_software = Community.find_by_identifier("debian").software_info |
214 | + refute edited_software.send(attr) | ||
180 | end | 215 | end |
181 | end | 216 | end |
182 | 217 | ||
@@ -199,7 +234,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -199,7 +234,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
199 | :software => fields[4] | 234 | :software => fields[4] |
200 | ) | 235 | ) |
201 | 236 | ||
202 | - assert SoftwareInfo.last.send(attr) | 237 | + edited_software = Community.find_by_identifier("debian").software_info |
238 | + assert edited_software.send(attr) | ||
203 | end | 239 | end |
204 | end | 240 | end |
205 | 241 | ||
@@ -214,7 +250,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -214,7 +250,8 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
214 | :profile => @person.identifier | 250 | :profile => @person.identifier |
215 | ) | 251 | ) |
216 | 252 | ||
217 | - assert_equal SoftwareInfo.last.license_info, LicenseInfo.last | 253 | + new_software = Community.find_by_identifier("new-software").software_info |
254 | + assert_equal new_software.license_info, LicenseInfo.last | ||
218 | end | 255 | end |
219 | 256 | ||
220 | should "create software_info with 'Another' license_info" do | 257 | should "create software_info with 'Another' license_info" do |
@@ -235,10 +272,11 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -235,10 +272,11 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
235 | :profile => @person.identifier | 272 | :profile => @person.identifier |
236 | ) | 273 | ) |
237 | 274 | ||
238 | - assert_equal license_another.id, SoftwareInfo.last.license_info_id | ||
239 | - assert_equal nil, SoftwareInfo.last.license_info.id | ||
240 | - assert_equal another_license_version, SoftwareInfo.last.license_info.version | ||
241 | - assert_equal another_license_link, SoftwareInfo.last.license_info.link | 275 | + new_software = Community.find_by_identifier("new-software").software_info |
276 | + assert_equal license_another.id, new_software.license_info_id | ||
277 | + assert_equal license_another.id, new_software.license_info.id | ||
278 | + assert_equal another_license_version, new_software.license_info.version | ||
279 | + assert_equal another_license_link, new_software.license_info.link | ||
242 | end | 280 | end |
243 | 281 | ||
244 | should "create software_info after finish task with 'Another' license_info" do | 282 | should "create software_info after finish task with 'Another' license_info" do |
@@ -251,6 +289,7 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -251,6 +289,7 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
251 | :new_software, | 289 | :new_software, |
252 | :community => { :name => "New Software", :identifier => "new-software" }, | 290 | :community => { :name => "New Software", :identifier => "new-software" }, |
253 | :software_info => { :finality => "something", :repository_link => "" }, | 291 | :software_info => { :finality => "something", :repository_link => "" }, |
292 | + :license_info => { :version => license_another.version }, | ||
254 | :license => { :license_infos_id => license_another.id, | 293 | :license => { :license_infos_id => license_another.id, |
255 | :version => another_license_version, | 294 | :version => another_license_version, |
256 | :link=> another_license_link | 295 | :link=> another_license_link |
@@ -261,10 +300,11 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -261,10 +300,11 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
261 | @environment.add_admin(@person) | 300 | @environment.add_admin(@person) |
262 | Task.last.send('finish', @person) | 301 | Task.last.send('finish', @person) |
263 | 302 | ||
264 | - assert_equal license_another.id, SoftwareInfo.last.license_info_id | ||
265 | - assert_equal nil, SoftwareInfo.last.license_info.id | ||
266 | - assert_equal another_license_version, SoftwareInfo.last.license_info.version | ||
267 | - assert_equal another_license_link, SoftwareInfo.last.license_info.link | 303 | + new_software = Community.find_by_identifier("new-software").software_info |
304 | + assert_equal license_another.id, new_software.license_info_id | ||
305 | + assert_equal license_another.id, new_software.license_info.id | ||
306 | + assert_equal another_license_version, new_software.license_info.version | ||
307 | + assert_equal another_license_link, new_software.license_info.link | ||
268 | end | 308 | end |
269 | 309 | ||
270 | should "show error messages on create software_info" do | 310 | should "show error messages on create software_info" do |
@@ -316,8 +356,9 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | @@ -316,8 +356,9 @@ class SoftwareCommunitiesPluginMyprofileControllerTest < ActionController::TestC | ||
316 | @environment.add_admin(@person) | 356 | @environment.add_admin(@person) |
317 | Task.last.send('finish', @person) | 357 | Task.last.send('finish', @person) |
318 | 358 | ||
359 | + new_software = Community.find_by_identifier("new-software").software_info | ||
319 | assert_equal "New Software", Task.last.data[:name] | 360 | assert_equal "New Software", Task.last.data[:name] |
320 | - assert_equal "New Software", SoftwareInfo.last.community.name | 361 | + assert_equal "New Software", new_software.community.name |
321 | end | 362 | end |
322 | 363 | ||
323 | should "dont create software without accept task" do | 364 | should "dont create software without accept task" do |
src/noosfero-spb/software_communities/test/helpers/plugin_test_helper.rb
@@ -9,9 +9,12 @@ module PluginTestHelper | @@ -9,9 +9,12 @@ module PluginTestHelper | ||
9 | end | 9 | end |
10 | 10 | ||
11 | def create_software_info name, finality = "something", acronym = "" | 11 | def create_software_info name, finality = "something", acronym = "" |
12 | + license = create_license_info("GPL") | ||
12 | community = create_community(name) | 13 | community = create_community(name) |
14 | + | ||
13 | software_info = SoftwareInfo.new | 15 | software_info = SoftwareInfo.new |
14 | software_info.community = community | 16 | software_info.community = community |
17 | + software_info.license_info = license | ||
15 | software_info.finality = finality | 18 | software_info.finality = finality |
16 | software_info.acronym = acronym | 19 | software_info.acronym = acronym |
17 | software_info.public_software = true | 20 | software_info.public_software = true |
@@ -55,7 +58,7 @@ module PluginTestHelper | @@ -55,7 +58,7 @@ module PluginTestHelper | ||
55 | end | 58 | end |
56 | 59 | ||
57 | def create_license_info version, link = "" | 60 | def create_license_info version, link = "" |
58 | - license = LicenseInfo.create(:version => version) | 61 | + license = LicenseInfo.find_or_create_by_version(version) |
59 | license.link = link | 62 | license.link = link |
60 | license.save | 63 | license.save |
61 | 64 |
src/noosfero-spb/software_communities/test/unit/software_info_test.rb
@@ -36,7 +36,6 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | @@ -36,7 +36,6 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | ||
36 | @software_info.another_license(another_license_version, another_license_link) | 36 | @software_info.another_license(another_license_version, another_license_link) |
37 | 37 | ||
38 | assert_equal @software_info.license_info_id, @license_another.id | 38 | assert_equal @software_info.license_info_id, @license_another.id |
39 | - assert_equal @software_info.license_info.id, nil | ||
40 | assert_equal @software_info.license_info.version, another_license_version | 39 | assert_equal @software_info.license_info.version, another_license_version |
41 | assert_equal @software_info.license_info.link, another_license_link | 40 | assert_equal @software_info.license_info.link, another_license_link |
42 | end | 41 | end |
@@ -53,7 +52,16 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | @@ -53,7 +52,16 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | ||
53 | assert_equal 1, SoftwareInfo.search_by_query("", Environment.default).count | 52 | assert_equal 1, SoftwareInfo.search_by_query("", Environment.default).count |
54 | assert_equal software_info, SoftwareInfo.search_by_query("", Environment.default).first | 53 | assert_equal software_info, SoftwareInfo.search_by_query("", Environment.default).first |
55 | assert_equal 1, SoftwareInfo.search_by_query("", other_env).count | 54 | assert_equal 1, SoftwareInfo.search_by_query("", other_env).count |
56 | - assert_equal true, SoftwareInfo.search_by_query("", other_env).includes?(another_software_info) | 55 | + assert_equal true, SoftwareInfo.search_by_query("", other_env).include?(another_software_info) |
57 | end | 56 | end |
58 | 57 | ||
58 | + should "start another license with default values" do | ||
59 | + software_info = create_software_info("software_test") | ||
60 | + license_another = create_license_info("Another") | ||
61 | + | ||
62 | + software_info.license_info_id = license_another.id | ||
63 | + | ||
64 | + assert_equal software_info.license_info.version, "Another" | ||
65 | + assert_equal software_info.license_info.link, "#" | ||
66 | + end | ||
59 | end | 67 | end |
src/noosfero-spb/software_communities/test/unit/software_info_validation_test.rb
@@ -31,6 +31,8 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | @@ -31,6 +31,8 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | ||
31 | @operating_system.operating_system_name = @operating_system_name | 31 | @operating_system.operating_system_name = @operating_system_name |
32 | @operating_system.save | 32 | @operating_system.save |
33 | 33 | ||
34 | + @license_info = LicenseInfo.create(:version => 'New License', :link => '#') | ||
35 | + | ||
34 | @software_info = SoftwareInfo.new( | 36 | @software_info = SoftwareInfo.new( |
35 | :acronym => "SFTW", | 37 | :acronym => "SFTW", |
36 | :e_mag => true, | 38 | :e_mag => true, |
@@ -41,7 +43,8 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | @@ -41,7 +43,8 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | ||
41 | :operating_platform => true, | 43 | :operating_platform => true, |
42 | :objectives => "", | 44 | :objectives => "", |
43 | :features => "", | 45 | :features => "", |
44 | - :finality => "something" | 46 | + :finality => "something", |
47 | + :license_info => @license_info | ||
45 | ) | 48 | ) |
46 | @software_info.software_languages << @software_language | 49 | @software_info.software_languages << @software_language |
47 | @software_info.software_databases << @software_database | 50 | @software_info.software_databases << @software_database |
@@ -119,4 +122,10 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | @@ -119,4 +122,10 @@ class SoftwareInfoValidationTest < ActiveSupport::TestCase | ||
119 | assert_equal false, @software_info.save | 122 | assert_equal false, @software_info.save |
120 | assert_equal true, @software_info.errors.full_messages.include?(error_msg) | 123 | assert_equal true, @software_info.errors.full_messages.include?(error_msg) |
121 | end | 124 | end |
125 | + | ||
126 | + should "not save software without license" do | ||
127 | + @software_info.license_info = nil | ||
128 | + | ||
129 | + assert_equal false, @software_info.save | ||
130 | + end | ||
122 | end | 131 | end |
src/noosfero-spb/software_communities/test/unit/software_registration_test.rb
@@ -5,6 +5,8 @@ class SoftwareRegistrationTest < ActiveSupport::TestCase | @@ -5,6 +5,8 @@ class SoftwareRegistrationTest < ActiveSupport::TestCase | ||
5 | def setup | 5 | def setup |
6 | @environment = Environment.default | 6 | @environment = Environment.default |
7 | @environment.enable_plugin(SoftwareCommunitiesPlugin) | 7 | @environment.enable_plugin(SoftwareCommunitiesPlugin) |
8 | + | ||
9 | + @license_info = LicenseInfo.create(:version => "New License", :link => "#") | ||
8 | end | 10 | end |
9 | 11 | ||
10 | def teardown | 12 | def teardown |
@@ -31,7 +33,8 @@ class SoftwareRegistrationTest < ActiveSupport::TestCase | @@ -31,7 +33,8 @@ class SoftwareRegistrationTest < ActiveSupport::TestCase | ||
31 | :name => "Teste Two", | 33 | :name => "Teste Two", |
32 | :requestor => person, | 34 | :requestor => person, |
33 | :environment => @environment, | 35 | :environment => @environment, |
34 | - :finality => "something" | 36 | + :finality => "something", |
37 | + :license_info => @license_info | ||
35 | ) | 38 | ) |
36 | 39 | ||
37 | software_count = SoftwareInfo.count | 40 | software_count = SoftwareInfo.count |