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

pulibrary / tigerdata-app / 1f9ee909-20b2-467d-b493-b5be4964430d

22 Oct 2025 04:57PM UTC coverage: 91.212%. Remained the same
1f9ee909-20b2-467d-b493-b5be4964430d

push

circleci

web-flow
Fixing flaky tests (#2080)

10 times out of 10 one of these tests would fail for me locally.

Really we just have to look at the page for something new so that we are
sure the controller action has finished before we check for something
that is not waiting.

2740 of 3004 relevant lines covered (91.21%)

755.12 hits per line

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

92.86
/app/models/mediaflux/iterator_request.rb
1
# frozen_string_literal: true
2
module Mediaflux
5✔
3
  class IteratorRequest < Request
5✔
4
    # Constructor
5
    # @param session_token [String] the API token for the authenticated session
6
    # @iterator [Int] The iterator returned by Mediaflux (via QueryRequest)
7
    def initialize(session_token:, iterator:, action: "get-values", size: nil)
5✔
8
      super(session_token: session_token)
81✔
9
      @iterator = iterator
81✔
10
      @size = size
81✔
11
      @action = action
81✔
12
    end
13

14
    # Specifies the Mediaflux service to use when running a query
15
    # @return [String]
16
    def self.service
5✔
17
      "asset.query.iterate"
162✔
18
    end
19

20
    # Returns hash with the files fetched in this iteration as well as a flag on whether we are
21
    # done iterating (complete=true) or if we need to keep iterating
22
    def result
5✔
23
      xml = response_xml
81✔
24
      {
25
        files: parse_files(xml),
81✔
26
        complete: xml.xpath("/response/reply/result/iterated/@complete").text == "true",
27
        count: xml.xpath("/response/reply/result/iterated").text.to_i
28
      }
29
    end
30

31
    private
5✔
32

33
      def build_http_request_body(name:)
5✔
34
        super do |xml|
162✔
35
          xml.args do
162✔
36
            xml.id @iterator
162✔
37
            xml.size @size if @size.present?
162✔
38
          end
39
        end
40
      end
41

42
      def parse_files(xml)
5✔
43
        case @action
81✔
44
        when "get-name"
45
          parse_get_name(xml)
2✔
46
        when "get-meta"
47
          parse_get_meta(xml)
2✔
48
        when "get-values"
49
          parse_get_values(xml)
77✔
50
        else
51
          raise "Cannot parse result. Unknow action: #{@action}."
×
52
        end
53
      end
54

55
      # Extracts file information when the request was made with the "action: get-name" parameter
56
      def parse_get_name(xml)
5✔
57
        files = []
2✔
58
        xml.xpath("/response/reply/result/name").each do |node|
2✔
59
          file = Mediaflux::Asset.new(
×
60
            id: node.xpath("./@id").text,
61
            name: node.text,
62
            collection: node.xpath("./@collection").text == "true"
63
          )
64
          files << file
×
65
        end
66
        files
2✔
67
      end
68

69
      # Extracts file information when the request was made with the "action: get-meta" parameter
70
      def parse_get_meta(xml)
5✔
71
        files = []
2✔
72
        xml.xpath("/response/reply/result/asset").each do |node|
2✔
73
          file = Mediaflux::Asset.new(
4✔
74
            id: node.xpath("./@id").text,
75
            name: node.xpath("./name").text,
76
            path: node.xpath("./path").text,
77
            collection: node.xpath("./@collection").text == "true",
78
            size: node.xpath("./content/@total-size").text.to_i,
79
            last_modified_mf: node.xpath("mtime").text
80
          )
81
          files << file
4✔
82
        end
83
        files
2✔
84
      end
85

86
      # Extracts file information when the request was made with the "action: get-values" parameter
87
      # Notice that this code is coupled with the fields defined in QueryRequest.
88
      def parse_get_values(xml)
5✔
89
        files = []
77✔
90
        xml.xpath("/response/reply/result/asset").each do |node|
77✔
91
          file = Mediaflux::Asset.new(
428✔
92
            id: node.xpath("./@id").text,
93
            name: node.xpath("./name").text,
94
            path: node.xpath("./path").text,
95
            collection: node.xpath("./collection").text == "true",
96
            size: node.xpath("./total-size").text.to_i,
97
            last_modified_mf: node.xpath("mtime").text
98
          )
99
          files << file
428✔
100
        end
101
        files
77✔
102
      end
103
  end
104
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