alchemy_cms 3.0.0.rc6 → 3.0.0.rc7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/models/alchemy/page/page_users.rb +9 -3
- data/lib/alchemy/test_support/factories.rb +21 -0
- data/lib/alchemy/version.rb +1 -1
- data/spec/controllers/admin/pages_controller_spec.rb +55 -0
- data/spec/dummy/app/models/dummy_user.rb +2 -12
- data/spec/features/admin/dashboard_spec.rb +1 -1
- data/spec/models/page_spec.rb +35 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02135f0ba23a59280b20309cec71a326a544ff42
|
4
|
+
data.tar.gz: 053e8ad503e06ae42a9c07435c41ef161828161e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19c8cb6b48175d8b27345fff351ff9d5acea1e7a95af065e2c2094a44f6428474f79b6d1d5a8be2ac7aaf78068295c4a41131d4a9a6d1cdff975046a53462e47
|
7
|
+
data.tar.gz: e182d4b3f9a33a1e2c148e83b8b0824df7474d5c952cfdc3ab42c7c3bf612d8992df8dc4eab8ddd6db0ba614f214e3e2edd8a94469a568fbf829296d7a88a894
|
@@ -2,16 +2,22 @@ module Alchemy
|
|
2
2
|
module Page::PageUsers
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
+
# Returns the creator of this page.
|
6
|
+
#
|
5
7
|
def creator
|
6
|
-
Alchemy.user_class.try(:
|
8
|
+
Alchemy.user_class.try(:find_by, {id: creator_id})
|
7
9
|
end
|
8
10
|
|
11
|
+
# Returns the last updater of this page.
|
12
|
+
#
|
9
13
|
def updater
|
10
|
-
Alchemy.user_class.try(:
|
14
|
+
Alchemy.user_class.try(:find_by, {id: updater_id})
|
11
15
|
end
|
12
16
|
|
17
|
+
# Returns the user currently editing this page.
|
18
|
+
#
|
13
19
|
def locker
|
14
|
-
Alchemy.user_class.try(:
|
20
|
+
Alchemy.user_class.try(:find_by, {id: locked_by})
|
15
21
|
end
|
16
22
|
|
17
23
|
# Returns the name of the creator of this page.
|
@@ -1,5 +1,26 @@
|
|
1
1
|
FactoryGirl.define do
|
2
2
|
|
3
|
+
factory :user, class: 'DummyUser' do
|
4
|
+
sequence(:email) { |n| "john.#{n}@doe.com" }
|
5
|
+
password 's3cr3t'
|
6
|
+
|
7
|
+
factory :admin_user do
|
8
|
+
alchemy_roles 'admin'
|
9
|
+
end
|
10
|
+
|
11
|
+
factory :member_user do
|
12
|
+
alchemy_roles 'member'
|
13
|
+
end
|
14
|
+
|
15
|
+
factory :author_user do
|
16
|
+
alchemy_roles 'author'
|
17
|
+
end
|
18
|
+
|
19
|
+
factory :editor_user do
|
20
|
+
alchemy_roles 'editor'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
3
24
|
factory :language, :class => 'Alchemy::Language' do
|
4
25
|
name 'Deutsch'
|
5
26
|
code 'de'
|
data/lib/alchemy/version.rb
CHANGED
@@ -233,6 +233,61 @@ module Alchemy
|
|
233
233
|
end
|
234
234
|
end
|
235
235
|
|
236
|
+
describe '#edit' do
|
237
|
+
let!(:page) { create(:page) }
|
238
|
+
let!(:other_user) { create(:author_user) }
|
239
|
+
|
240
|
+
context 'if page is locked by another user' do
|
241
|
+
before { page.lock_to!(other_user) }
|
242
|
+
|
243
|
+
context 'that is signed in' do
|
244
|
+
before { DummyUser.any_instance.stub(logged_in?: true) }
|
245
|
+
|
246
|
+
it 'redirects to sitemap' do
|
247
|
+
get :edit, id: page.id
|
248
|
+
expect(response).to redirect_to(admin_pages_path)
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
context 'that is not signed in' do
|
253
|
+
before { DummyUser.any_instance.stub(logged_in?: false) }
|
254
|
+
|
255
|
+
it 'renders the edit view' do
|
256
|
+
get :edit, id: page.id
|
257
|
+
expect(response).to render_template(:edit)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
context 'if page is locked by myself' do
|
263
|
+
before do
|
264
|
+
Page.any_instance.stub(locker: user)
|
265
|
+
user.stub(logged_in?: true)
|
266
|
+
end
|
267
|
+
|
268
|
+
it 'renders the edit view' do
|
269
|
+
get :edit, id: page.id
|
270
|
+
expect(response).to render_template(:edit)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
context 'if page is not locked' do
|
275
|
+
before do
|
276
|
+
Page.any_instance.stub(locker: nil)
|
277
|
+
end
|
278
|
+
|
279
|
+
it 'renders the edit view' do
|
280
|
+
get :edit, id: page.id
|
281
|
+
expect(response).to render_template(:edit)
|
282
|
+
end
|
283
|
+
|
284
|
+
it "lockes the page to myself" do
|
285
|
+
Page.any_instance.should_receive(:lock_to!)
|
286
|
+
get :edit, id: page.id
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
236
291
|
describe '#destroy' do
|
237
292
|
let(:clipboard) { session[:clipboard] = Clipboard.new }
|
238
293
|
let(:page) { FactoryGirl.create(:public_page) }
|
@@ -1,17 +1,7 @@
|
|
1
|
-
class DummyUser
|
2
|
-
|
3
|
-
|
4
|
-
attr_accessor :alchemy_roles, :language, :cache_key, :email, :password, :name, :id
|
1
|
+
class DummyUser < ActiveRecord::Base
|
2
|
+
attr_accessor :alchemy_roles, :name
|
5
3
|
|
6
4
|
def self.logged_in
|
7
5
|
[]
|
8
6
|
end
|
9
|
-
|
10
|
-
def self.stamper_class_name
|
11
|
-
:DummyUser
|
12
|
-
end
|
13
|
-
|
14
|
-
def update_attributes(attributes)
|
15
|
-
attributes.each { |key,value| send("#{key}=".to_sym, value) }
|
16
|
-
end
|
17
7
|
end
|
@@ -33,7 +33,7 @@ describe 'Dashboard feature' do
|
|
33
33
|
user = DummyUser.new
|
34
34
|
user.update_attributes(alchemy_roles: %w(admin), name: "Sue Smith", id: 2)
|
35
35
|
a_page.lock_to!(user)
|
36
|
-
DummyUser.stub(:
|
36
|
+
DummyUser.stub(:find_by).and_return(user)
|
37
37
|
visit admin_dashboard_path
|
38
38
|
locked_pages_widget = all('div[@class="widget"]').first
|
39
39
|
expect(locked_pages_widget).to have_content "Currently locked pages:"
|
data/spec/models/page_spec.rb
CHANGED
@@ -1349,6 +1349,41 @@ module Alchemy
|
|
1349
1349
|
|
1350
1350
|
context 'indicate page editors' do
|
1351
1351
|
let(:page) { Page.new }
|
1352
|
+
let(:user) { create(:editor_user) }
|
1353
|
+
|
1354
|
+
describe '#creator' do
|
1355
|
+
before { page.update(creator_id: user.id) }
|
1356
|
+
|
1357
|
+
it "returns the user that created the page" do
|
1358
|
+
expect(page.creator).to eq(user)
|
1359
|
+
end
|
1360
|
+
end
|
1361
|
+
|
1362
|
+
describe '#updater' do
|
1363
|
+
before { page.update(updater_id: user.id) }
|
1364
|
+
|
1365
|
+
it "returns the user that created the page" do
|
1366
|
+
expect(page.updater).to eq(user)
|
1367
|
+
end
|
1368
|
+
end
|
1369
|
+
|
1370
|
+
describe '#locker' do
|
1371
|
+
before { page.update(locked_by: user.id) }
|
1372
|
+
|
1373
|
+
it "returns the user that created the page" do
|
1374
|
+
expect(page.locker).to eq(user)
|
1375
|
+
end
|
1376
|
+
end
|
1377
|
+
|
1378
|
+
context 'with user that can not be found' do
|
1379
|
+
it 'does not raise not found error' do
|
1380
|
+
%w(creator updater locker).each do |user_type|
|
1381
|
+
expect {
|
1382
|
+
page.send(user_type)
|
1383
|
+
}.to_not raise_error(ActiveRecord::RecordNotFound)
|
1384
|
+
end
|
1385
|
+
end
|
1386
|
+
end
|
1352
1387
|
|
1353
1388
|
context 'with user class having a name accessor' do
|
1354
1389
|
let(:user) { double(name: 'Paul Page') }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alchemy_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.
|
4
|
+
version: 3.0.0.rc7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas von Deyen
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2014-06-
|
15
|
+
date: 2014-06-04 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rails
|