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

benwbrum / fromthepage / 25323270135

04 May 2026 01:58PM UTC coverage: 69.762% (+0.1%) from 69.661%
25323270135

Pull #5439

github

web-flow
Merge 71a484382 into ab4bee7b3
Pull Request #5439: Fix missing CDM sync status emails for owners and staff

2416 of 3975 branches covered (60.78%)

Branch coverage included in aggregate %.

5 of 5 new or added lines in 1 file covered. (100.0%)

83 existing lines in 11 files now uncovered.

9964 of 13771 relevant lines covered (72.35%)

152.76 hits per line

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

95.38
/app/controllers/api/v1/document_upload_controller.rb
1
module Api::V1
1✔
2
  class DocumentUploadController < ApplicationController
1✔
3
    before_action :set_api_user
1✔
4
    skip_before_action :verify_authenticity_token
1✔
5

6
    # Start a document upload
7
    # POST /api/v1/document_upload/:collection_slug
8
    def start
1✔
9
      unless @api_user
7✔
10
        render status: 401, json: 'You must use an API token to access document uploads'
1✔
11
        return
1✔
12
      end
13

14
      collection_slug = params[:collection_slug]
6✔
15
      collection_or_set = Collection::Lib::SetFriendlyFind.perform(id: collection_slug)
6✔
16

17
      if collection_or_set.nil?
6✔
18
        render status: 404, json: "No collection or document set exists with the slug #{collection_slug}"
1✔
19
        return
1✔
20
      end
21

22
      if collection_or_set.is_a?(DocumentSet)
5✔
23
        document_set = collection_or_set
1✔
24
        collection = document_set.collection
1✔
25
      else
4✔
26
        document_set = nil
4✔
27
        collection = collection_or_set
4✔
28
      end
29

30
      unless @api_user.like_owner?(collection)
5✔
31
        render status: 403, json: "User #{@api_user.login} is not authorized to upload to #{collection.title}"
1✔
32
        return
1✔
33
      end
34

35
      unless params[:file].present?
4✔
36
        render status: 400, json: 'A file parameter is required'
1✔
37
        return
1✔
38
      end
39

40
      document_upload = DocumentUpload.new
3✔
41
      document_upload.collection = collection
3✔
42
      document_upload.document_set = document_set
3✔
43
      document_upload.user = @api_user
3✔
44
      document_upload.ocr = ActiveModel::Type::Boolean.new.cast(params[:ocr])
3✔
45
      document_upload.preserve_titles = ActiveModel::Type::Boolean.new.cast(params[:preserve_titles])
3✔
46
      document_upload.generate_ai_draft = ActiveModel::Type::Boolean.new.cast(params[:generate_ai_draft])
3✔
47
      document_upload.attachment = params[:file]
3✔
48
      document_upload.upload_file_size = params[:file].size
3✔
49

50
      unless document_upload.save
3!
51
        render status: 422, json: document_upload.errors.full_messages.to_json
×
UNCOV
52
        return
×
53
      end
54

55
      document_upload.submit_process
3✔
56

57
      response = {
58
        id: document_upload.id,
3✔
59
        status: document_upload.status,
60
        status_uri: api_v1_document_upload_status_url(document_upload.id)
61
      }
62

63
      render status: 202, json: response.to_json
3✔
64
    end
65

66
    # Get the status of a document upload
67
    # GET /api/v1/document_upload/:document_upload_id/status
68
    def status
1✔
69
      unless @api_user
3✔
70
        render status: 401, json: 'You must use an API token to access document uploads'
1✔
71
        return
1✔
72
      end
73

74
      document_upload_id = params[:document_upload_id]
2✔
75
      document_upload = @api_user.document_uploads.find_by(id: document_upload_id)
2✔
76

77
      if document_upload
2✔
78
        response = {
79
          id: document_upload.id,
1✔
80
          status: document_upload.status,
81
          status_uri: api_v1_document_upload_status_url(document_upload.id)
82
        }
83
        render status: 200, json: response.to_json
1✔
84
      else
1✔
85
        render status: 403, json: "User #{@api_user.login} has no document upload with ID #{document_upload_id}"
1✔
86
      end
87
    end
88
  end
89
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

© 2026 Coveralls, Inc