Skip to content

Commit 2d6635e

Browse files
committed
well, do not return publication authorization document when not admin or operator
1 parent 3141262 commit 2d6635e

File tree

6 files changed

+56
-27
lines changed

6 files changed

+56
-27
lines changed

app/models/operator_document.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,8 @@ class OperatorDocument < ApplicationRecord
7878
scope :by_source, ->(source_id) { where(source: source_id) }
7979
scope :available, -> { where(public: true) }
8080
scope :expirable, -> { where(status: EXPIRABLE_STATUSES) }
81-
scope :signature, -> {
82-
joins(:required_operator_document).where(required_operator_documents: {contract_signature: true})
83-
}
84-
scope :non_signature, -> {
85-
joins(:required_operator_document).where(required_operator_documents: {contract_signature: false})
86-
} # non signature
81+
scope :signature, -> { joins(:required_operator_document).where(required_operator_documents: {contract_signature: true}) }
82+
scope :non_signature, -> { joins(:required_operator_document).where(required_operator_documents: {contract_signature: false}) }
8783
scope :to_expire, ->(date) {
8884
expirable
8985
.joins(:required_operator_document)

app/models/operator_document_country.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
class OperatorDocumentCountry < OperatorDocument
3131
belongs_to :required_operator_document_country, foreign_key: "required_operator_document_id", inverse_of: :operator_document_countries
3232

33-
after_update :update_operator_approved, if: -> { required_operator_document.contract_signature? }
33+
after_update :update_operator_approved, if: :publication_authorization?
3434

3535
protected
3636

app/resources/v1/operator_document_history_resource.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,14 @@ def created_at
3535
@model.operator_document_created_at
3636
end
3737

38-
# TODO
3938
def self.records(options = {})
4039
context = options[:context]
41-
operator = context.dig(:filters, "operator-id")
40+
operator_id = context.dig(:filters, "operator-id")
4241
date = context.dig(:filters, "date").to_date
4342

44-
OperatorDocumentHistory.from_operator_at_date(operator, date).non_signature
45-
rescue
46-
OperatorDocumentHistory.where("true = false") unless operator && date
43+
return OperatorDocumentHistory.none unless operator_id && date
44+
45+
OperatorDocumentHistory.from_operator_at_date(operator_id, date).non_signature
4746
end
4847
end
4948
end

app/resources/v1/operator_document_resource.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,17 @@ def set_user_id
4343
end
4444

4545
def self.records(options = {})
46-
OperatorDocument.from_active_operators
46+
context = options[:context]
47+
user = context[:current_user]
48+
49+
records = OperatorDocument.from_active_operators
50+
return records if user.present? && user.admin?
51+
52+
if user.present? && user.operator_ids.any?
53+
other_signature_documents = OperatorDocument.signature.where.not(operator_id: user.operator_ids)
54+
return records.where.not(id: other_signature_documents.pluck(:id))
55+
end
56+
records.where(id: OperatorDocument.non_signature) # somehow records.non_signature is not working
4757
end
4858

4959
def self.apply_filter(records, filter, value, options)

spec/factories/users.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109
end
110110

111111
factory :admin do
112-
sequence(:email) { |n| Faker::Internet.email }
112+
sequence(:email) { |n| "admin#{n}@example.com" }
113113

114114
first_name { "Admin" }
115115
last_name { "user" }

spec/integration/v1/operator_documents_spec.rb

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,36 @@ module V1
99
@signature_group = create(:required_operator_document_group, name: "Publication Authorization")
1010
country = create(:country)
1111
# below generates one document
12-
@signature_document = create(:required_operator_document_country, required_operator_document_group: @signature_group, contract_signature: true, country: country)
13-
create(:operator, country: country, fa_id: "fa_id")
12+
create(:required_operator_document_country, required_operator_document_group: @signature_group, contract_signature: true, country: country)
13+
@operator = create(:operator, country: country, fa_id: "fa_id", approved: false)
1414
document_group = create(:required_operator_document_group, name: "Some group")
1515
# below creates 7 country documents for operator
1616
create_list(:required_operator_document_country, 7, required_operator_document_group: document_group, country: country)
17-
@doc_invalid = create(:operator_document_fmu)
17+
@doc_invalid = create(:operator_document_fmu, operator: @operator)
1818
@doc_valid_private = create(
1919
:operator_document_fmu,
20+
operator: @operator,
2021
start_date: 10.days.ago,
2122
expire_date: 10.days.from_now,
2223
response_date: 10.days.ago,
2324
public: false,
2425
note: "notes"
2526
)
26-
@doc_invalid.update(status: "doc_invalid", admin_comment: "invalid")
27-
@doc_valid_private.update(status: "doc_valid")
27+
@doc_invalid.update!(status: "doc_invalid", admin_comment: "invalid")
28+
@doc_valid_private.update!(status: "doc_valid")
29+
@signature_document = @operator.reload.operator_documents.signature.first # not sure why need to reload operator
2830
end
2931

30-
describe "GET all OperatorDocuments" do
32+
def sign_publication_authorization!
33+
@signature_document.update!(
34+
document_file: create(:document_file),
35+
start_date: Time.zone.today,
36+
expire_date: 1.year.from_now,
37+
status: "doc_valid"
38+
)
39+
end
40+
41+
describe "GET OperatorDocuments" do
3142
it "is successful" do
3243
get("/operator-documents?locale=en", headers: admin_headers)
3344
expect(status).to eql(200)
@@ -53,29 +64,45 @@ module V1
5364
expect(returned_document[:status]).to eq("doc_invalid")
5465
expect(returned_document[:"admin-comment"]).to eq("invalid")
5566
end
67+
68+
it "returns publication authorization" do
69+
get(operator_documents_url_with_included, headers: admin_headers)
70+
71+
returned_document = parsed_data.find { |d| d[:id] == @signature_document.id.to_s }[:attributes]
72+
73+
expect(returned_document[:status]).to eq("doc_not_provided")
74+
end
5675
end
5776

5877
context "when not admin" do
78+
it "does not return publication authorization" do
79+
get(operator_documents_url_with_included, headers: user_headers)
80+
81+
returned_document = parsed_data.find { |d| d[:id] == @signature_document.id.to_s }
82+
83+
expect(returned_document).to be_nil
84+
end
85+
5986
it "hides OperatorDocuments status" do
6087
get(operator_documents_url_with_included, headers: user_headers)
6188

6289
returned_document = parsed_data.find { |d| d[:id] == @doc_invalid.id.to_s }[:attributes]
6390

64-
expect(parsed_data.count).to eql(10)
91+
expect(parsed_data.count).to eql(9)
6592
expect(returned_document[:status]).to eq("doc_not_provided")
6693
expect(returned_document[:"admin-comment"]).to be_nil
6794
end
6895

6996
context "with signed publication authorization" do
7097
# approved is by default true (??? weird but no need to reset it back to true)
71-
before(:each) { @doc_valid_private.operator.update(approved: true) }
98+
before(:each) { sign_publication_authorization! }
7299

73100
it "returns status if document not public" do
74101
get(operator_documents_url_with_included, headers: user_headers)
75102

76103
returned_document = parsed_data.find { |d| d[:id] == @doc_valid_private.id.to_s }[:attributes]
77104

78-
expect(parsed_data.count).to eql(10)
105+
expect(parsed_data.count).to eql(9)
79106
expect(returned_document[:status]).to eq("doc_valid")
80107
expect(returned_document[:"start-date"]).to eq(@doc_valid_private.start_date.to_s)
81108
expect(returned_document[:"expire-date"]).to eq(@doc_valid_private.expire_date.to_s)
@@ -91,14 +118,11 @@ module V1
91118
end
92119

93120
context "with not signed publication authorization" do
94-
before(:each) { @doc_valid_private.operator.update(approved: false) }
95-
after(:each) { @doc_valid_private.operator.update(approved: true) }
96-
97121
it "returns not provided and hides attributes if document not public" do
98122
get(operator_documents_url_with_included, headers: user_headers)
99123

100124
returned_document = parsed_data.find { |d| d[:id] == @doc_valid_private.id.to_s }[:attributes]
101-
expect(parsed_data.count).to eql(10)
125+
expect(parsed_data.count).to eql(9)
102126
expect(returned_document[:status]).to eq("doc_not_provided")
103127
expect(returned_document[:"start-date"]).to be_nil
104128
expect(returned_document[:"expire-date"]).to be_nil

0 commit comments

Comments
 (0)