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

MarkUsProject / Markus / 10473848203

20 Aug 2024 02:44PM UTC coverage: 91.446% (+0.009%) from 91.437%
10473848203

push

github

david-yz-liu
Upgrade to Rails v7.2

575 of 1302 branches covered (44.16%)

Branch coverage included in aggregate %.

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

4 existing lines in 3 files now uncovered.

40242 of 43333 relevant lines covered (92.87%)

112.38 hits per line

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

78.22
/app/controllers/api/starter_file_groups_controller.rb
1
module Api
1✔
2
  # Api controller for starter file groups
3
  class StarterFileGroupsController < MainApiController
1✔
4
    def create
1✔
5
      assignment = Assignment.find_by(id: params[:assignment_id])
5✔
6
      other_params = params.permit(:entry_rename, :use_rename, :name).to_h.symbolize_keys
5✔
7
      starter_file_group = StarterFileGroup.new(assessment_id: assignment.id, **other_params)
5✔
8
      if starter_file_group.save
5✔
9
        render 'shared/http_status', locals: { code: '201', message:
5✔
10
            HttpStatusHelper::ERROR_CODE['message']['201'] }, status: :created
11
      else
12
        render 'shared/http_status', locals: { code: '500', message:
×
13
            starter_file_group.errors.full_messages.first }, status: :internal_server_error
14
      end
15
    end
16

17
    def update
1✔
18
      starter_file_group = record
3✔
19
      if starter_file_group.update(params.permit(:name, :entry_rename, :use_rename))
3✔
20
        if starter_file_group.assignment.starter_file_type == 'shuffle' &&
3✔
UNCOV
21
            (starter_file_group.saved_change_to_entry_rename? || starter_file_group.saved_change_to_use_rename?)
×
22
          starter_file_group.assignment.groupings.update_all(starter_file_changed: true)
×
23
        end
24
        render 'shared/http_status', locals: { code: '200', message:
3✔
25
            HttpStatusHelper::ERROR_CODE['message']['200'] }, status: :ok
26
      else
27
        render 'shared/http_status', locals: { code: '500', message:
×
28
            starter_file_group.errors.full_messages.first }, status: :internal_server_error
29
      end
30
    end
31

32
    def destroy
1✔
33
      starter_file_group = record
1✔
34
      if starter_file_group.destroy
1✔
35
        render 'shared/http_status', locals: { code: '200', message:
1✔
36
            HttpStatusHelper::ERROR_CODE['message']['200'] }, status: :ok
37
      else
38
        render 'shared/http_status', locals: { code: '500', message:
×
39
            starter_file_group.errors.full_messages.first }, status: :internal_server_error
40
      end
41
    end
42

43
    def index
1✔
44
      assignment = Assignment.find_by(id: params[:assignment_id])
4✔
45
      respond_to do |format|
4✔
46
        format.xml { render xml: assignment.starter_file_groups.to_xml(skip_types: 'true') }
6✔
47
        format.json { render json: assignment.starter_file_groups.to_json }
6✔
48
      end
49
    end
50

51
    def show
1✔
52
      starter_file_group = record
3✔
53
      respond_to do |format|
3✔
54
        format.xml { render xml: starter_file_group.to_xml(skip_types: 'true') }
5✔
55
        format.json { render json: starter_file_group.to_json }
4✔
56
      end
57
    end
58

59
    def create_file
1✔
60
      starter_file_group = record
7✔
61
      if has_missing_params?([:filename, :file_content])
7✔
62
        # incomplete/invalid HTTP params
63
        render 'shared/http_status', locals: { code: '422', message:
×
64
            HttpStatusHelper::ERROR_CODE['message']['422'] }, status: :unprocessable_entity
65
        return
×
66
      end
67

68
      if params[:file_content].respond_to? :read # binary data
7✔
69
        content = params[:file_content].read
×
70
      else
71
        content = params[:file_content]
7✔
72
      end
73
      file_path = FileHelper.checked_join(starter_file_group.path, params[:filename])
7✔
74
      if file_path.nil?
7✔
75
        render 'shared/http_status', locals: { code: '422', message:
2✔
76
          HttpStatusHelper::ERROR_CODE['message']['422'] }, status: :unprocessable_entity
77
      else
78
        File.write(file_path, content, mode: 'wb')
5✔
79
        update_entries_and_warn(starter_file_group)
5✔
80
        render 'shared/http_status',
5✔
81
               locals: { code: '201', message: HttpStatusHelper::ERROR_CODE['message']['201'] },
82
               status: :created
83
      end
84
    rescue StandardError => e
85
      message = "#{HttpStatusHelper::ERROR_CODE['message']['500']}\n\n#{e.message}"
×
86
      render 'shared/http_status', locals: { code: '500', message: message }, status: :internal_server_error
×
87
    end
88

89
    def create_folder
1✔
90
      starter_file_group = record
6✔
91
      if has_missing_params?([:folder_path])
6✔
92
        # incomplete/invalid HTTP params
93
        render 'shared/http_status', locals: { code: '422', message:
×
94
            HttpStatusHelper::ERROR_CODE['message']['422'] }, status: :unprocessable_entity
95
        return
×
96
      end
97

98
      folder_path = FileHelper.checked_join(starter_file_group.path, params[:folder_path])
6✔
99
      if folder_path.nil?
6✔
100
        render 'shared/http_status', locals: { code: '422', message:
2✔
101
          HttpStatusHelper::ERROR_CODE['message']['422'] }, status: :unprocessable_entity
102
      else
103
        FileUtils.mkdir_p(folder_path)
4✔
104
        update_entries_and_warn(starter_file_group)
4✔
105
        render 'shared/http_status',
4✔
106
               locals: { code: '201', message: HttpStatusHelper::ERROR_CODE['message']['201'] },
107
               status: :created
108
      end
109
    rescue StandardError => e
110
      message = "#{HttpStatusHelper::ERROR_CODE['message']['500']}\n\n#{e.message}"
×
111
      render 'shared/http_status', locals: { code: '500', message: message }, status: :internal_server_error
×
112
    end
113

114
    def remove_file
1✔
115
      starter_file_group = record
6✔
116
      if has_missing_params?([:filename])
6✔
117
        # incomplete/invalid HTTP params
118
        render 'shared/http_status', locals: { code: '422', message:
×
119
            HttpStatusHelper::ERROR_CODE['message']['422'] }, status: :unprocessable_entity
120
        return
×
121
      end
122
      file_path = FileHelper.checked_join(starter_file_group.path, params[:filename])
6✔
123
      if file_path.nil?
6✔
124
        render 'shared/http_status', locals: { code: '422', message:
2✔
125
          HttpStatusHelper::ERROR_CODE['message']['422'] }, status: :unprocessable_entity
126
      else
127
        File.delete(file_path)
4✔
128
        update_entries_and_warn(starter_file_group)
4✔
129
        render 'shared/http_status',
4✔
130
               locals: { code: '200', message: HttpStatusHelper::ERROR_CODE['message']['200'] },
131
               status: :ok
132
      end
133
    rescue StandardError => e
134
      message = "#{HttpStatusHelper::ERROR_CODE['message']['500']}\n\n#{e.message}"
×
135
      render 'shared/http_status', locals: { code: '500', message: message }, status: :internal_server_error
×
136
    end
137

138
    def remove_folder
1✔
139
      starter_file_group = record
6✔
140
      if has_missing_params?([:folder_path])
6✔
141
        # incomplete/invalid HTTP params
142
        render 'shared/http_status', locals: { code: '422', message:
×
143
            HttpStatusHelper::ERROR_CODE['message']['422'] }, status: :unprocessable_entity
144
        return
×
145
      end
146

147
      folder_path = FileHelper.checked_join(starter_file_group.path, params[:folder_path])
6✔
148
      if folder_path.nil?
6✔
149
        render 'shared/http_status', locals: { code: '422', message:
2✔
150
          HttpStatusHelper::ERROR_CODE['message']['422'] }, status: :unprocessable_entity
151
      else
152
        FileUtils.rm_rf(folder_path)
4✔
153
        update_entries_and_warn(starter_file_group)
4✔
154
        render 'shared/http_status',
4✔
155
               locals: { code: '200', message: HttpStatusHelper::ERROR_CODE['message']['200'] },
156
               status: :ok
157
      end
158
    rescue StandardError => e
159
      message = "#{HttpStatusHelper::ERROR_CODE['message']['500']}\n\n#{e.message}"
×
160
      render 'shared/http_status', locals: { code: '500', message: message }, status: :internal_server_error
×
161
    end
162

163
    def download_entries
1✔
164
      starter_file_group = record
1✔
165
      zip_path = starter_file_group.zip_starter_file_files(current_role)
1✔
166
      send_file zip_path, filename: File.basename(zip_path)
1✔
167
    end
168

169
    def entries
1✔
170
      starter_file_group = record
2✔
171
      respond_to do |format|
2✔
172
        paths = starter_file_group.files_and_dirs
2✔
173
        format.xml { render xml: paths.to_xml(root: 'paths', skip_types: 'true') }
3✔
174
        format.json { render json: paths.to_json }
3✔
175
      end
176
    end
177

178
    private
1✔
179

180
    # Update starter file entries for +starter_file_group+ and set the starter_file_changed
181
    # attribute to true for all groupings affected by the change.
182
    def update_entries_and_warn(starter_file_group)
1✔
183
      starter_file_group.assignment.assignment_properties.update!(starter_file_updated_at: Time.current)
17✔
184
      starter_file_group.update_entries
17✔
185
    end
186
  end
187
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