From 19083712c4984fe6be72bf81ad5a6fe3fcf103cb Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 15 Sep 2024 17:02:04 +0200 Subject: [PATCH 01/21] POST /todo test --- .../app/controllers/todo_controller.rb | 2 + todo_backend/spec/factories/todo.rb | 11 ++++++ todo_backend/spec/requests/todo_spec.rb | 39 +++++++++++++++++++ ..._spec_helper.rb => request_spec_helper.rb} | 0 4 files changed, 52 insertions(+) create mode 100644 todo_backend/app/controllers/todo_controller.rb create mode 100644 todo_backend/spec/factories/todo.rb create mode 100644 todo_backend/spec/requests/todo_spec.rb rename todo_backend/spec/support/{group_spec_helper.rb => request_spec_helper.rb} (100%) diff --git a/todo_backend/app/controllers/todo_controller.rb b/todo_backend/app/controllers/todo_controller.rb new file mode 100644 index 0000000..5977b7b --- /dev/null +++ b/todo_backend/app/controllers/todo_controller.rb @@ -0,0 +1,2 @@ +class TodoController < ApplicationController +end diff --git a/todo_backend/spec/factories/todo.rb b/todo_backend/spec/factories/todo.rb new file mode 100644 index 0000000..92bbabf --- /dev/null +++ b/todo_backend/spec/factories/todo.rb @@ -0,0 +1,11 @@ +FactoryBot.define do + factory :todo do + status { Faker::Number.between(from: 0, to: 3) } + group_id { Faker::Number.between(from: 0, to: 10) } + priority { Faker::Number.between(from: 1, to: 5) } + date_creation { Faker::Time.between(from: DateTime.now - 10, to: DateTime.now) } + date_planning { Faker::TIme.between(from: DateTime.now - 10, to: DateTime.now + 10) } + title { Faker::Lorem.sentence(word_count: 1, random_words_to_add: 4) } + description { Faker::Lorem.paragraph(sentence_count: 2, random_sentences_to_add: 4) } + end +end diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb new file mode 100644 index 0000000..b13bdc8 --- /dev/null +++ b/todo_backend/spec/requests/todo_spec.rb @@ -0,0 +1,39 @@ +require 'rails_helper' + +RSpec.describe "Todos", type: :request do + let!(:todos) { create_list(:todo, 10) } + + # Create new todo + describe "POST /todo" do + let(:valid_attributes) { + { + group_id: Faker::Number.between(from: 0, to: 10), + priority: Faker::Number.between(from: 1, to: 5), + date_planning: Faker::TIme.between(from: DateTime.now - 10, to: DateTime.now + 10), + title: Faker::Lorem.sentence(word_count: 1, random_words_to_add: 4), + description: Faker::Lorem.paragraph(sentence_count: 2, random_sentences_to_add: 4) + } + } + + context "request is valid" do + before { post '/todo', params: valid_attributes } + + it "created has default values" do + expect(json['status']).to eq(0) + expect(json['date_creation']).to eq(DateTime.now) + end + + it "created has user defined values" do + expect(json['group_id']).to eq(valid_attributes['group_id']) + expect(json['priority']).to eq(valid_attributes['priority']) + expect(json['date_planning']).to eq(valid_attributes['date_planning']) + expect(json['title']).to eq(valid_attributes['title']) + expect(json['description']).to eq(valid_attributes['description']) + end + + it "returns status code 201" do + expect(response).to have_http_status(201) + end + end + end +end diff --git a/todo_backend/spec/support/group_spec_helper.rb b/todo_backend/spec/support/request_spec_helper.rb similarity index 100% rename from todo_backend/spec/support/group_spec_helper.rb rename to todo_backend/spec/support/request_spec_helper.rb From fdd2e4f29e0697ffea25db6a389edbda244faee5 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 15 Sep 2024 17:15:33 +0200 Subject: [PATCH 02/21] DELETE /todo test --- todo_backend/spec/requests/todo_spec.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index b13bdc8..f57348f 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -2,6 +2,7 @@ RSpec.describe "Todos", type: :request do let!(:todos) { create_list(:todo, 10) } + let(:todo_id) { todos.first.id.to_s } # Create new todo describe "POST /todo" do @@ -36,4 +37,18 @@ end end end + + # Delete todo + describe "DELETE /todo/:id" do + let(:todos_count) { ToDo.count } + before { delete '/todo/' + todo_id } + + it "returns status code 204" do + expect(response).to have_http_status 204 + end + + it "changes count of todos" do + expect(ToDo.count).to eq(todos_count - 1) + end + end end From 0804f7cd13258a57874d11d9a7dca85ca9285fa7 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 15 Sep 2024 17:21:08 +0200 Subject: [PATCH 03/21] PUT /todo test --- todo_backend/spec/requests/todo_spec.rb | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index f57348f..3ac039a 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -17,6 +17,7 @@ } context "request is valid" do + let(:todos_count) { ToDo.count } before { post '/todo', params: valid_attributes } it "created has default values" do @@ -32,12 +33,46 @@ expect(json['description']).to eq(valid_attributes['description']) end + it "changes count of todos" do + expect(ToDo.count).to eq(todos_count + 1) + end + it "returns status code 201" do expect(response).to have_http_status(201) end end end + # Update existing todo + describe "PUT /todo/:id" do + let(:valid_attributes) { + { + group_id: Faker::Number.between(from: 0, to: 10), + priority: Faker::Number.between(from: 1, to: 5), + date_planning: Faker::TIme.between(from: DateTime.now - 10, to: DateTime.now + 10), + title: Faker::Lorem.sentence(word_count: 1, random_words_to_add: 4), + description: Faker::Lorem.paragraph(sentence_count: 2, random_sentences_to_add: 4) + } + } + + context "record exists" do + let(:todos_count) { ToDo.count } + before { put '/todo/' + todo_id, params: valid_attributes } + + it "updates record" do + expect(response.body).to be_empty + end + + it "same count of todos" do + expect(ToDo.count).to eq(todos_count) + end + + it "returns status code 204" do + expect(response).to have_http_status(204) + end + end + end + # Delete todo describe "DELETE /todo/:id" do let(:todos_count) { ToDo.count } From 87b4c3bd4c625ce9a64f03ac35abbaeb2887baa5 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 15 Sep 2024 17:22:46 +0200 Subject: [PATCH 04/21] POST invalid request test --- todo_backend/spec/requests/todo_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index 3ac039a..2f25839 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -41,6 +41,19 @@ expect(response).to have_http_status(201) end end + + context "request is invalid" do + let(:todos_count) { ToDo.count } + before { post '/todo', params: {} } + + it "same count of todos" do + expect(ToDo.count).to eq(todos_count) + end + + it "returns status code 422" do + expect(response).to have_http_status(422) + end + end end # Update existing todo From 4d1718828b5e41105969f7df484f074fdd20f24c Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:03:04 +0200 Subject: [PATCH 05/21] trying to write tests --- .../app/controllers/todo_controller.rb | 21 +++++++++++++++++++ todo_backend/config/routes.rb | 1 + todo_backend/spec/factories/todo.rb | 6 +++--- todo_backend/spec/requests/todo_spec.rb | 16 +++++++------- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/todo_backend/app/controllers/todo_controller.rb b/todo_backend/app/controllers/todo_controller.rb index 5977b7b..143c4e4 100644 --- a/todo_backend/app/controllers/todo_controller.rb +++ b/todo_backend/app/controllers/todo_controller.rb @@ -1,2 +1,23 @@ class TodoController < ApplicationController +before_action :set_todo, only: [ ] + + # test index + def index + @todos = ToDo.all + json_response(@todos) + end + + def create + @todo = ToDo.create!(todo_params) # status: 0, date_creation: DateTime.now + json_response(@todo, :created) + end + + def todo_params + params + .permit(:group_id, :priority, :date_planning, :title, :description) + .merge(date_creation: DateTime.now, status: 0) + end + def set_todo + @todo = ToDo.find(params[:id]) + end end diff --git a/todo_backend/config/routes.rb b/todo_backend/config/routes.rb index 237d45a..05b58ea 100644 --- a/todo_backend/config/routes.rb +++ b/todo_backend/config/routes.rb @@ -12,4 +12,5 @@ # Defines the root path route ("/") # root "posts#index" resources :group + resources :todo end diff --git a/todo_backend/spec/factories/todo.rb b/todo_backend/spec/factories/todo.rb index 92bbabf..eb92419 100644 --- a/todo_backend/spec/factories/todo.rb +++ b/todo_backend/spec/factories/todo.rb @@ -1,10 +1,10 @@ FactoryBot.define do - factory :todo do + factory :to_do do status { Faker::Number.between(from: 0, to: 3) } - group_id { Faker::Number.between(from: 0, to: 10) } + group priority { Faker::Number.between(from: 1, to: 5) } date_creation { Faker::Time.between(from: DateTime.now - 10, to: DateTime.now) } - date_planning { Faker::TIme.between(from: DateTime.now - 10, to: DateTime.now + 10) } + date_planning { Faker::Time.between(from: DateTime.now - 10, to: DateTime.now + 10) } title { Faker::Lorem.sentence(word_count: 1, random_words_to_add: 4) } description { Faker::Lorem.paragraph(sentence_count: 2, random_sentences_to_add: 4) } end diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index 2f25839..c6410b8 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -1,26 +1,28 @@ require 'rails_helper' RSpec.describe "Todos", type: :request do - let!(:todos) { create_list(:todo, 10) } + Group.create(name: "Default") + let!(:todos) { create_list(:to_do, 10) } let(:todo_id) { todos.first.id.to_s } # Create new todo describe "POST /todo" do let(:valid_attributes) { { - group_id: Faker::Number.between(from: 0, to: 10), + group_id: 1, priority: Faker::Number.between(from: 1, to: 5), - date_planning: Faker::TIme.between(from: DateTime.now - 10, to: DateTime.now + 10), + date_planning: Faker::Time.between(from: DateTime.now - 10, to: DateTime.now + 10), title: Faker::Lorem.sentence(word_count: 1, random_words_to_add: 4), description: Faker::Lorem.paragraph(sentence_count: 2, random_sentences_to_add: 4) } } - context "request is valid" do + context "request is valid =>" do let(:todos_count) { ToDo.count } before { post '/todo', params: valid_attributes } it "created has default values" do + p json expect(json['status']).to eq(0) expect(json['date_creation']).to eq(DateTime.now) end @@ -42,7 +44,7 @@ end end - context "request is invalid" do + context "request is invalid =>" do let(:todos_count) { ToDo.count } before { post '/todo', params: {} } @@ -60,9 +62,9 @@ describe "PUT /todo/:id" do let(:valid_attributes) { { - group_id: Faker::Number.between(from: 0, to: 10), + group_id: Faker::Number.between(from: 1, to: 10), priority: Faker::Number.between(from: 1, to: 5), - date_planning: Faker::TIme.between(from: DateTime.now - 10, to: DateTime.now + 10), + date_planning: Faker::Time.between(from: DateTime.now - 10, to: DateTime.now + 10), title: Faker::Lorem.sentence(word_count: 1, random_words_to_add: 4), description: Faker::Lorem.paragraph(sentence_count: 2, random_sentences_to_add: 4) } From 3e789511dec53c76d8959cd74d22237363358b4d Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:46:01 +0200 Subject: [PATCH 06/21] fixed some tests --- todo_backend/spec/requests/todo_spec.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index c6410b8..c4a14a9 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -1,7 +1,8 @@ require 'rails_helper' RSpec.describe "Todos", type: :request do - Group.create(name: "Default") + let(:group_id) { create(:group).id } + let!(:todos) { create_list(:to_do, 10) } let(:todo_id) { todos.first.id.to_s } @@ -9,7 +10,7 @@ describe "POST /todo" do let(:valid_attributes) { { - group_id: 1, + group_id: group_id, priority: Faker::Number.between(from: 1, to: 5), date_planning: Faker::Time.between(from: DateTime.now - 10, to: DateTime.now + 10), title: Faker::Lorem.sentence(word_count: 1, random_words_to_add: 4), @@ -22,17 +23,16 @@ before { post '/todo', params: valid_attributes } it "created has default values" do - p json expect(json['status']).to eq(0) expect(json['date_creation']).to eq(DateTime.now) end it "created has user defined values" do - expect(json['group_id']).to eq(valid_attributes['group_id']) - expect(json['priority']).to eq(valid_attributes['priority']) - expect(json['date_planning']).to eq(valid_attributes['date_planning']) - expect(json['title']).to eq(valid_attributes['title']) - expect(json['description']).to eq(valid_attributes['description']) + expect(json['group_id']).to eq(valid_attributes[:group_id]) + expect(json['priority']).to eq(valid_attributes[:priority]) + expect(json['date_planning']).to eq(valid_attributes[:date_planning]) + expect(json['title']).to eq(valid_attributes[:title]) + expect(json['description']).to eq(valid_attributes[:description]) end it "changes count of todos" do From 5c6293b3406437ebc23695f065d5b7dd4b6b7c6d Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 19:52:20 +0200 Subject: [PATCH 07/21] fixed tests --- todo_backend/spec/requests/todo_spec.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index c4a14a9..9fc9786 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -19,24 +19,26 @@ } context "request is valid =>" do - let(:todos_count) { ToDo.count } - before { post '/todo', params: valid_attributes } + before { + @todos_count = ToDo.count + post '/todo', params: valid_attributes + } it "created has default values" do expect(json['status']).to eq(0) - expect(json['date_creation']).to eq(DateTime.now) + expect(json['date_creation']).to be > (DateTime.now - 1).utc.iso8601(3) # eq(DateTime.now.utc.iso8601(3)) end it "created has user defined values" do expect(json['group_id']).to eq(valid_attributes[:group_id]) expect(json['priority']).to eq(valid_attributes[:priority]) - expect(json['date_planning']).to eq(valid_attributes[:date_planning]) + expect(json['date_planning']).to eq(valid_attributes[:date_planning].change(sec: valid_attributes[:date_planning].sec).utc.iso8601(3)) expect(json['title']).to eq(valid_attributes[:title]) expect(json['description']).to eq(valid_attributes[:description]) end it "changes count of todos" do - expect(ToDo.count).to eq(todos_count + 1) + expect(ToDo.count).to eq(@todos_count + 1) end it "returns status code 201" do From 91a8584759c1cd1c100af83528bc6c0dfbd7ef12 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:31:03 +0200 Subject: [PATCH 08/21] fixed problem with unique generator --- todo_backend/spec/rails_helper.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/todo_backend/spec/rails_helper.rb b/todo_backend/spec/rails_helper.rb index 35199da..deb4317 100644 --- a/todo_backend/spec/rails_helper.rb +++ b/todo_backend/spec/rails_helper.rb @@ -86,8 +86,9 @@ DatabaseCleaner.clean_with(:truncation) DatabaseCleaner.strategy = :transaction end - + config.around(:each) do |example| + Faker::UniqueGenerator.clear DatabaseCleaner.cleaning do example.run end From 9a35a96c028f7eee5d25aaad41f67c8951aeb0c3 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:32:15 +0200 Subject: [PATCH 09/21] UPDATE --- todo_backend/app/controllers/todo_controller.rb | 14 +++++++++++--- todo_backend/spec/requests/todo_spec.rb | 13 ++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/todo_backend/app/controllers/todo_controller.rb b/todo_backend/app/controllers/todo_controller.rb index 143c4e4..95b709a 100644 --- a/todo_backend/app/controllers/todo_controller.rb +++ b/todo_backend/app/controllers/todo_controller.rb @@ -1,5 +1,5 @@ class TodoController < ApplicationController -before_action :set_todo, only: [ ] +before_action :set_todo, only: [ :update ] # test index def index @@ -8,15 +8,23 @@ def index end def create - @todo = ToDo.create!(todo_params) # status: 0, date_creation: DateTime.now + @todo = ToDo.create!(todo_params_create) # status: 0, date_creation: DateTime.now json_response(@todo, :created) end - def todo_params + def update + @todo.update(todo_params_update) + end + + def todo_params_create params .permit(:group_id, :priority, :date_planning, :title, :description) .merge(date_creation: DateTime.now, status: 0) end + def todo_params_update + params + .permit(:status, :group_id, :priority, :date_planning, :title, :description) + end def set_todo @todo = ToDo.find(params[:id]) end diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index 9fc9786..ef9cf4a 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -63,8 +63,9 @@ # Update existing todo describe "PUT /todo/:id" do let(:valid_attributes) { - { - group_id: Faker::Number.between(from: 1, to: 10), + { + status: Faker::Number.between(from: 0, to: 3), + group_id: group_id, priority: Faker::Number.between(from: 1, to: 5), date_planning: Faker::Time.between(from: DateTime.now - 10, to: DateTime.now + 10), title: Faker::Lorem.sentence(word_count: 1, random_words_to_add: 4), @@ -73,15 +74,17 @@ } context "record exists" do - let(:todos_count) { ToDo.count } - before { put '/todo/' + todo_id, params: valid_attributes } + before { + @todos_count = ToDo.count + put '/todo/' + todo_id, params: valid_attributes + } it "updates record" do expect(response.body).to be_empty end it "same count of todos" do - expect(ToDo.count).to eq(todos_count) + expect(ToDo.count).to eq(@todos_count) end it "returns status code 204" do From dc00764c7603f88f617e04b43e685f5ce83eb914 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:32:52 +0200 Subject: [PATCH 10/21] fixed delete test --- todo_backend/spec/requests/todo_spec.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index ef9cf4a..fc724c7 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -95,15 +95,17 @@ # Delete todo describe "DELETE /todo/:id" do - let(:todos_count) { ToDo.count } - before { delete '/todo/' + todo_id } + before { + @todos_count = ToDo.count + delete '/todo/' + todo_id + } it "returns status code 204" do expect(response).to have_http_status 204 end it "changes count of todos" do - expect(ToDo.count).to eq(todos_count - 1) + expect(ToDo.count).to eq(@todos_count - 1) end end end From 2d21e50984942eaa1012f349f4f70eb4e86f8051 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:43:23 +0200 Subject: [PATCH 11/21] DESTROY --- todo_backend/app/controllers/todo_controller.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/todo_backend/app/controllers/todo_controller.rb b/todo_backend/app/controllers/todo_controller.rb index 95b709a..bc82724 100644 --- a/todo_backend/app/controllers/todo_controller.rb +++ b/todo_backend/app/controllers/todo_controller.rb @@ -1,5 +1,5 @@ class TodoController < ApplicationController -before_action :set_todo, only: [ :update ] +before_action :set_todo, only: [ :update, :destroy ] # test index def index @@ -7,15 +7,25 @@ def index json_response(@todos) end + # POST /todo def create @todo = ToDo.create!(todo_params_create) # status: 0, date_creation: DateTime.now json_response(@todo, :created) end + # PUT /todo/:id def update @todo.update(todo_params_update) end + # DELETE /todo/:id + def destroy + @todo.destroy + head :no_content + end + + # Helpers + def todo_params_create params .permit(:group_id, :priority, :date_planning, :title, :description) @@ -25,6 +35,7 @@ def todo_params_update params .permit(:status, :group_id, :priority, :date_planning, :title, :description) end + def set_todo @todo = ToDo.find(params[:id]) end From 0dbef0df32415bd2719cc7eabdbeeecd02262976 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:45:31 +0200 Subject: [PATCH 12/21] code style fixes --- todo_backend/app/controllers/todo_controller.rb | 2 +- todo_backend/spec/requests/todo_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/todo_backend/app/controllers/todo_controller.rb b/todo_backend/app/controllers/todo_controller.rb index bc82724..225e5a4 100644 --- a/todo_backend/app/controllers/todo_controller.rb +++ b/todo_backend/app/controllers/todo_controller.rb @@ -6,7 +6,7 @@ def index @todos = ToDo.all json_response(@todos) end - + # POST /todo def create @todo = ToDo.create!(todo_params_create) # status: 0, date_creation: DateTime.now diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index fc724c7..03bb3f0 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -9,7 +9,7 @@ # Create new todo describe "POST /todo" do let(:valid_attributes) { - { + { group_id: group_id, priority: Faker::Number.between(from: 1, to: 5), date_planning: Faker::Time.between(from: DateTime.now - 10, to: DateTime.now + 10), From 024c0d4f577d6021c66538171f58d519de6a420a Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:47:10 +0200 Subject: [PATCH 13/21] code style fixes 2 --- todo_backend/spec/rails_helper.rb | 2 +- todo_backend/spec/requests/todo_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/todo_backend/spec/rails_helper.rb b/todo_backend/spec/rails_helper.rb index deb4317..d5d82a9 100644 --- a/todo_backend/spec/rails_helper.rb +++ b/todo_backend/spec/rails_helper.rb @@ -86,7 +86,7 @@ DatabaseCleaner.clean_with(:truncation) DatabaseCleaner.strategy = :transaction end - + config.around(:each) do |example| Faker::UniqueGenerator.clear DatabaseCleaner.cleaning do diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index 03bb3f0..54ca286 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -19,9 +19,9 @@ } context "request is valid =>" do - before { + before { @todos_count = ToDo.count - post '/todo', params: valid_attributes + post '/todo', params: valid_attributes } it "created has default values" do From bae29e0c88b0cb6610fbc6a43df3cc4e0876cfc8 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 20:57:13 +0200 Subject: [PATCH 14/21] updated INDEX --- todo_backend/app/controllers/todo_controller.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/todo_backend/app/controllers/todo_controller.rb b/todo_backend/app/controllers/todo_controller.rb index 225e5a4..3e355b5 100644 --- a/todo_backend/app/controllers/todo_controller.rb +++ b/todo_backend/app/controllers/todo_controller.rb @@ -1,9 +1,9 @@ class TodoController < ApplicationController before_action :set_todo, only: [ :update, :destroy ] - # test index + # GET /todo?group_id def index - @todos = ToDo.all + @todos = ToDo.where(:group_id => todo_params_index[:group_id]).select(:id, :title, :priority, :date_planning) json_response(@todos) end @@ -26,6 +26,10 @@ def destroy # Helpers + def todo_params_index + params + .permit(:group_id) + end def todo_params_create params .permit(:group_id, :priority, :date_planning, :title, :description) From bc72c64f17db16e5fdb3747222ce7c7c72d35e9f Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 21:15:46 +0200 Subject: [PATCH 15/21] updated postman --- todo_vue_rails.postman_collection.json | 165 +++++++++++++++++++++++++ 1 file changed, 165 insertions(+) diff --git a/todo_vue_rails.postman_collection.json b/todo_vue_rails.postman_collection.json index 1856233..352abcc 100644 --- a/todo_vue_rails.postman_collection.json +++ b/todo_vue_rails.postman_collection.json @@ -104,6 +104,171 @@ "response": [] } ] + }, + { + "name": "todo", + "item": [ + { + "name": "List ToDo's", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{ADDR}}/todo?group_id=", + "host": [ + "{{ADDR}}" + ], + "path": [ + "todo" + ], + "query": [ + { + "key": "group_id", + "value": "" + } + ] + } + }, + "response": [] + }, + { + "name": "Get ToDo", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{ADDR}}/todo/:id", + "host": [ + "{{ADDR}}" + ], + "path": [ + "todo", + ":id" + ], + "variable": [ + { + "key": "id", + "value": "" + } + ] + } + }, + "response": [] + }, + { + "name": "Create ToDo", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{ADDR}}/todo?group_id&priority&date_planning&title&description", + "host": [ + "{{ADDR}}" + ], + "path": [ + "todo" + ], + "query": [ + { + "key": "group_id", + "value": null + }, + { + "key": "priority", + "value": null + }, + { + "key": "date_planning", + "value": null + }, + { + "key": "title", + "value": null + }, + { + "key": "description", + "value": null + } + ] + } + }, + "response": [] + }, + { + "name": "Update ToDo", + "request": { + "method": "PUT", + "header": [], + "url": { + "raw": "{{ADDR}}/todo/:id?status=&group_id=&priority=&date_planning=&title=&description=", + "host": [ + "{{ADDR}}" + ], + "path": [ + "todo", + ":id" + ], + "query": [ + { + "key": "status", + "value": "" + }, + { + "key": "group_id", + "value": "" + }, + { + "key": "priority", + "value": "" + }, + { + "key": "date_planning", + "value": "" + }, + { + "key": "title", + "value": "" + }, + { + "key": "description", + "value": "" + } + ], + "variable": [ + { + "key": "id", + "value": "" + } + ] + } + }, + "response": [] + }, + { + "name": "Delete ToDo", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{ADDR}}/todo/:id", + "host": [ + "{{ADDR}}" + ], + "path": [ + "todo", + ":id" + ], + "variable": [ + { + "key": "id", + "value": "" + } + ] + } + }, + "response": [] + } + ] } ], "event": [ From 047daf3ab6d324938380230d5cabded22c7e546c Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Sun, 22 Sep 2024 21:17:10 +0200 Subject: [PATCH 16/21] code style fix --- todo_backend/app/controllers/todo_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/todo_backend/app/controllers/todo_controller.rb b/todo_backend/app/controllers/todo_controller.rb index 3e355b5..601bf3f 100644 --- a/todo_backend/app/controllers/todo_controller.rb +++ b/todo_backend/app/controllers/todo_controller.rb @@ -3,7 +3,7 @@ class TodoController < ApplicationController # GET /todo?group_id def index - @todos = ToDo.where(:group_id => todo_params_index[:group_id]).select(:id, :title, :priority, :date_planning) + @todos = ToDo.where(group_id: todo_params_index[:group_id]).select(:id, :title, :priority, :date_planning) json_response(@todos) end From 229834c74c4d9303d265a670f92db1c3e84d0fd9 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Mon, 23 Sep 2024 20:10:37 +0200 Subject: [PATCH 17/21] script to run tests on windows --- todo_backend/run_test.ps1 | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 todo_backend/run_test.ps1 diff --git a/todo_backend/run_test.ps1 b/todo_backend/run_test.ps1 new file mode 100644 index 0000000..488b8be --- /dev/null +++ b/todo_backend/run_test.ps1 @@ -0,0 +1,3 @@ +$container_id = docker ps | ?{$_ -match 'todo_backend-web'} | % { ($_ -split " ")[0] } +cls +docker exec $container_id bundle exec rspec \ No newline at end of file From 7925bc848401ae42ab0d2e3c69bed3be1efb2200 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Mon, 23 Sep 2024 20:24:30 +0200 Subject: [PATCH 18/21] tests for list and show --- todo_backend/spec/requests/todo_spec.rb | 49 +++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index 54ca286..327a41f 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -6,6 +6,55 @@ let!(:todos) { create_list(:to_do, 10) } let(:todo_id) { todos.first.id.to_s } + # Get list of todos + describe "GET /todo?group_id" do + + it "returns properly count each group" do + @groups = ToDo.group(:group_id).count + @groups.each do |key, value| + get '/todo?group_id=' + key.to_s + expect(json).not_to be_empty + expect(json.size).to eq(value) + expect(response).to have_http_status(200) + end + end + end + + # Get data of todo + describe "GET /todo/:id" do + + context "id is valid =>" do + let(:todo_test) { todos.first } + before { get '/todo/' + todo_id } + + it "returns data" do + expect(json['status']).to eq(todo_test[:status]) + expect(json['group_id']).to eq(todo_test[:group_id]) + expect(json['priority']).to eq(todo_test[:priority]) + expect(json['date_creation']).to eq(todo_test[:date_creation]) + expect(json['date_planning']).to eq(todo_test[:date_planning]) + expect(json['title']).to eq(todo_test[:title]) + expect(json['description']).to eq(todo_test[:description]) + end + + it "returns status code 200" do + expect(response).to have_http_status(200) + end + end + + context "id is invalid =>" do + before { get '/todo/-1' } + + it "not returning data" do + expect(response.body).to be_empty + end + + it "returns status code 204" do + expect(response).to have_http_status(204) + end + end + end + # Create new todo describe "POST /todo" do let(:valid_attributes) { From 989b016cb8c3c124d9dd448cbf65775ea3e6c833 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Mon, 23 Sep 2024 20:30:50 +0200 Subject: [PATCH 19/21] fixed tests --- todo_backend/spec/requests/todo_spec.rb | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index 327a41f..b40ec45 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -31,8 +31,8 @@ expect(json['status']).to eq(todo_test[:status]) expect(json['group_id']).to eq(todo_test[:group_id]) expect(json['priority']).to eq(todo_test[:priority]) - expect(json['date_creation']).to eq(todo_test[:date_creation]) - expect(json['date_planning']).to eq(todo_test[:date_planning]) + expect(json['date_creation']).to eq(todo_test[:date_creation].utc.iso8601(3)) + expect(json['date_planning']).to eq(todo_test[:date_planning].utc.iso8601(3)) expect(json['title']).to eq(todo_test[:title]) expect(json['description']).to eq(todo_test[:description]) end @@ -45,12 +45,13 @@ context "id is invalid =>" do before { get '/todo/-1' } - it "not returning data" do - expect(response.body).to be_empty + it "returns cannot find" do + expect(response.body) + .to match("{\"message\":\"Couldn't find ToDo with 'id'=" + (-1).to_s + "\"}") end - it "returns status code 204" do - expect(response).to have_http_status(204) + it "returns status code 404" do + expect(response).to have_http_status(404) end end end From 2cc9afd4bd2c3cc902c9cc3e622cb1effa8728e1 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Mon, 23 Sep 2024 20:31:15 +0200 Subject: [PATCH 20/21] SHOW todo --- todo_backend/app/controllers/todo_controller.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/todo_backend/app/controllers/todo_controller.rb b/todo_backend/app/controllers/todo_controller.rb index 601bf3f..0091808 100644 --- a/todo_backend/app/controllers/todo_controller.rb +++ b/todo_backend/app/controllers/todo_controller.rb @@ -1,5 +1,5 @@ class TodoController < ApplicationController -before_action :set_todo, only: [ :update, :destroy ] +before_action :set_todo, only: [ :show, :update, :destroy ] # GET /todo?group_id def index @@ -7,6 +7,11 @@ def index json_response(@todos) end + # GET /todo/:id + def show + json_response(@todo) + end + # POST /todo def create @todo = ToDo.create!(todo_params_create) # status: 0, date_creation: DateTime.now From f7e5d4f44e0d7264fe2fe479eb7e9ad6d0b52e04 Mon Sep 17 00:00:00 2001 From: 23vbq <42277522+23vbq@users.noreply.github.com> Date: Mon, 23 Sep 2024 20:32:29 +0200 Subject: [PATCH 21/21] code style fixes --- todo_backend/spec/requests/todo_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/todo_backend/spec/requests/todo_spec.rb b/todo_backend/spec/requests/todo_spec.rb index b40ec45..840c944 100644 --- a/todo_backend/spec/requests/todo_spec.rb +++ b/todo_backend/spec/requests/todo_spec.rb @@ -8,7 +8,6 @@ # Get list of todos describe "GET /todo?group_id" do - it "returns properly count each group" do @groups = ToDo.group(:group_id).count @groups.each do |key, value| @@ -22,7 +21,6 @@ # Get data of todo describe "GET /todo/:id" do - context "id is valid =>" do let(:todo_test) { todos.first } before { get '/todo/' + todo_id }