• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / tigerdata-app / c07767c7-9bab-45c6-b01b-5090ca4940a4

26 Nov 2025 09:10PM UTC coverage: 87.633% (+16.0%) from 71.597%
c07767c7-9bab-45c6-b01b-5090ca4940a4

Pull #2250

circleci

JaymeeH
persisting the approval provenance in the project
Pull Request #2250: Organize the submission provenance for a project

4 of 5 new or added lines in 2 files covered. (80.0%)

986 existing lines in 43 files now uncovered.

2806 of 3202 relevant lines covered (87.63%)

411.27 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/app/operations/project_search.rb
UNCOV
1
class ProjectSearch < Dry::Operation
2✔
UNCOV
2
    def call(search_string:, requestor:, field_name: "Title")
2✔
UNCOV
3
        verified_search_string = step verify_search_string(search_string)
13✔
UNCOV
4
        result_ids = step query_mediaflux(search_string: verified_search_string, requestor:, field_name:)
12✔
UNCOV
5
        step convert_results(result_ids)
11✔
UNCOV
6
    end
7

UNCOV
8
    private
2✔
9

UNCOV
10
    def verify_search_string(search_string)
2✔
11
        # An empty search does not make sense
UNCOV
12
        if search_string.blank?
13✔
13
            Failure("Search String cannot be empty")
1✔
14
        # Assuming there may be more verifications in the future
UNCOV
15
        else
UNCOV
16
            Success(search_string)
12✔
UNCOV
17
        end
UNCOV
18
    end
19

UNCOV
20
    def query_mediaflux(search_string:, requestor:, field_name:)
2✔
UNCOV
21
      query = mediaflux_query(search_string:, requestor:, field_name:)
12✔
UNCOV
22
      if query.error?
12✔
23
        Failure("Error querying mediaflux: #{query.response_error[:message]}")
1✔
UNCOV
24
      else
UNCOV
25
        result_ids = query.result_items.map{|result| result[:id]}
37✔
UNCOV
26
        Success(result_ids)
11✔
UNCOV
27
      end
UNCOV
28
    end
29

UNCOV
30
    def mediaflux_query(search_string:, requestor:, field_name:)
2✔
UNCOV
31
      aql_query = "xpath(tigerdata:project/#{field_name}) matches ignore-case '#{search_string}'"
12✔
UNCOV
32
      Mediaflux::QueryRequest.new(session_token: requestor.mediaflux_session, aql_query: , iterator: false )
12✔
UNCOV
33
    end
34

35

UNCOV
36
    def convert_results(result_ids)
2✔
UNCOV
37
      projects_not_found = []
11✔
UNCOV
38
      projects = []
11✔
UNCOV
39
      result_ids.map do |mediaflux_id|
11✔
UNCOV
40
        project = Project.find_by(mediaflux_id: )
26✔
UNCOV
41
        if project.blank?
26✔
UNCOV
42
          projects_not_found << mediaflux_id
13✔
UNCOV
43
        else
UNCOV
44
          projects << project
13✔
UNCOV
45
        end
UNCOV
46
      end
UNCOV
47
      if projects_not_found.count > 0
11✔
UNCOV
48
        Rails.logger.error("The following Mediaflux Projects were not found in the Rails database: #{projects_not_found.join(', ')}")
2✔
UNCOV
49
        Honeybadger.notify("The following Mediaflux Projects were not found in the Rails database: #{projects_not_found.join(', ')}")
2✔
UNCOV
50
      end
UNCOV
51
      Success(projects)
11✔
UNCOV
52
    end
UNCOV
53
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc