time_accounting_spec.rb 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. # Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe 'Ticket::TimeAccounting API', :aggregate_failures, type: :request do
  4. let(:ticket) { create(:ticket) }
  5. let(:user) { create(:agent, groups: Group.all) }
  6. describe 'GET /api/v1/tickets/:ticket_id/time_accountings' do
  7. let(:time_accounting_list) { create_list(:ticket_time_accounting, 3, ticket: ticket, time_unit: 10) }
  8. before do
  9. time_accounting_list
  10. authenticated_as(user)
  11. get "/api/v1/tickets/#{ticket.id}/time_accountings"
  12. end
  13. it 'returns the accounted time entry' do
  14. expect(response).to have_http_status(:ok)
  15. expect(json_response.pluck('id')).to eq(time_accounting_list.pluck(:id))
  16. end
  17. end
  18. describe 'GET /api/v1/tickets/:ticket_id/time_accountings/:id' do
  19. let(:time_accounting) { create(:ticket_time_accounting, ticket: ticket, time_unit: 22) }
  20. before do
  21. time_accounting
  22. authenticated_as(user)
  23. get "/api/v1/tickets/#{ticket.id}/time_accountings/#{time_accounting.id}"
  24. end
  25. it 'returns the accounted time entry' do
  26. expect(response).to have_http_status(:ok)
  27. expect(json_response['time_unit']).to eq('22.0')
  28. end
  29. end
  30. describe 'POST /api/v1/tickets/:ticket_id/time_accountings' do
  31. let(:article) { create(:ticket_article, ticket: ticket) }
  32. let(:params) { { time_unit: 11, ticket_articke_id: article.id } }
  33. before do
  34. article
  35. authenticated_as(user)
  36. post "/api/v1/tickets/#{ticket.id}/time_accountings", params: params, as: :json
  37. end
  38. context 'with article' do
  39. it 'returns the created accounted time entry' do
  40. expect(response).to have_http_status(:created)
  41. expect(json_response['time_unit']).to eq('11.0')
  42. end
  43. end
  44. context 'without article' do
  45. let(:params) { { time_unit: 11 } }
  46. it 'returns the created accounted time entry' do
  47. expect(response).to have_http_status(:created)
  48. expect(json_response['time_unit']).to eq('11.0')
  49. end
  50. end
  51. end
  52. describe 'PUT /api/v1/tickets/:ticket_id/time_accountings/:id' do
  53. let(:time_accounting) { create(:ticket_time_accounting, ticket: ticket, time_unit: 22) }
  54. let(:params) { { time_unit: 15 } }
  55. before do
  56. time_accounting
  57. authenticated_as(user)
  58. put "/api/v1/tickets/#{ticket.id}/time_accountings/#{time_accounting.id}", params: params, as: :json
  59. end
  60. context 'without admin permission' do
  61. it 'forbidden to update' do
  62. expect(response).to have_http_status(:forbidden)
  63. end
  64. end
  65. context 'with admin permission' do
  66. let(:user) { create(:admin, groups: Group.all) }
  67. it 'returns the updated accounted time entry' do
  68. expect(response).to have_http_status(:ok)
  69. expect(json_response['time_unit']).to eq('15.0')
  70. end
  71. end
  72. end
  73. describe 'DELETE /api/v1/tickets/:ticket_id/time_accountings/:id' do
  74. let(:time_accounting) { create(:ticket_time_accounting, ticket: ticket, time_unit: 22) }
  75. before do
  76. time_accounting
  77. authenticated_as(user)
  78. delete "/api/v1/tickets/#{ticket.id}/time_accountings/#{time_accounting.id}"
  79. end
  80. context 'without admin permission' do
  81. it 'forbidden to update' do
  82. expect(response).to have_http_status(:forbidden)
  83. end
  84. end
  85. context 'with admin permission' do
  86. let(:user) { create(:admin, groups: Group.all) }
  87. it 'returns the updated accounted time entry' do
  88. expect(response).to have_http_status(:ok)
  89. end
  90. end
  91. end
  92. end