87 lines
2.8 KiB
Ruby
87 lines
2.8 KiB
Ruby
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe KnowledgeBase::InternalAssets do
|
|
include_context 'basic Knowledge Base' do
|
|
before do
|
|
draft_answer
|
|
internal_answer
|
|
published_answer
|
|
end
|
|
end
|
|
|
|
describe '#collect_assets' do
|
|
subject(:assets) { described_class.new(user).collect_assets }
|
|
|
|
context 'when for KB editor' do
|
|
let(:user) { create(:user, roles: Role.where(name: 'Admin')) }
|
|
|
|
it 'returns assets for all KB objects' do
|
|
expect(assets).to include_assets_of(knowledge_base, category, draft_answer, internal_answer, published_answer)
|
|
end
|
|
|
|
context 'when has editor permission' do
|
|
before do
|
|
KnowledgeBase::PermissionsUpdate.new(category).update! user.roles.first => 'editor'
|
|
end
|
|
|
|
it 'returns assets for all KB objects' do
|
|
expect(assets).to include_assets_of(knowledge_base, category, draft_answer, internal_answer, published_answer)
|
|
end
|
|
end
|
|
|
|
context 'when has reader permission' do
|
|
before do
|
|
KnowledgeBase::PermissionsUpdate.new(category).update! user.roles.first => 'reader'
|
|
end
|
|
|
|
it 'returns assets for internally visible KB objects' do
|
|
expect(assets)
|
|
.to include_assets_of(knowledge_base, category, internal_answer, published_answer)
|
|
.and not_include_assets_of(draft_answer)
|
|
end
|
|
end
|
|
|
|
context 'when has none permission' do
|
|
before do
|
|
KnowledgeBase::PermissionsUpdate.new(category).update! user.roles.first => 'none'
|
|
end
|
|
|
|
it 'does not return assets for internally visible KB objects' do
|
|
published_answer.destroy # make sure public item does not make category visible
|
|
|
|
expect(assets)
|
|
.to include_assets_of(knowledge_base)
|
|
.and not_include_assets_of(category, draft_answer, internal_answer, published_answer)
|
|
end
|
|
|
|
it 'returns assets for published answer and it\'s category' do
|
|
expect(assets)
|
|
.to include_assets_of(knowledge_base, category, published_answer)
|
|
.and not_include_assets_of(draft_answer, internal_answer)
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when for agent' do
|
|
let(:user) { create(:agent) }
|
|
|
|
it 'returns assets for all KB objects' do
|
|
expect(assets)
|
|
.to include_assets_of(knowledge_base, category, internal_answer, published_answer)
|
|
.and not_include_assets_of(draft_answer)
|
|
end
|
|
end
|
|
|
|
context 'when for customer' do
|
|
let(:user) { create(:customer) }
|
|
|
|
it 'returns assets for all KB objects' do
|
|
expect(assets)
|
|
.to include_assets_of(knowledge_base)
|
|
.and not_include_assets_of(category, draft_answer, internal_answer, published_answer)
|
|
end
|
|
end
|
|
end
|
|
end
|