diff --git a/backend/spec/controllers/api/v1/posts_controller_spec.rb b/backend/spec/controllers/api/v1/posts_controller_spec.rb index 083526ce..cf1b434b 100644 --- a/backend/spec/controllers/api/v1/posts_controller_spec.rb +++ b/backend/spec/controllers/api/v1/posts_controller_spec.rb @@ -13,5 +13,28 @@ get :index expect(response_body[:posts].size).to eq 2 end + + it "returns a list of discussion posts filtered by post type" do + post = create(:post, user_id: user.id) + create(:post, user_id: other_user.id) + symptom = post.symptom_ids + + get :index, params: {id: symptom[0], type: "symptom"} + + expect(response_body[:posts].size).to eq 1 + end + + it "returns a list of discussion posts filtered by topic followings" do + post = create(:post, user_id: user.id) + create(:post, user_id: user.id) + create(:post, user_id: user.id) + topic_user_is_following = user.topic_following + topic_user_is_following.symptom_ids = post.symptom_ids + topic_user_is_following.save + + get :index, params: {following: true} + + expect(response_body[:posts].size).to eq 1 + end end end diff --git a/backend/spec/factories/patterns.rb b/backend/spec/factories/patterns.rb new file mode 100644 index 00000000..bd9e60d8 --- /dev/null +++ b/backend/spec/factories/patterns.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :pattern do + encrypted_user_id { create(:user).encrypted_id } + start_at { Time.zone.now } + end_at { 2.days.from_now } + name { "Chuck Norris" } + end +end diff --git a/backend/spec/models/ranked_enum_spec.rb b/backend/spec/models/ranked_enum_spec.rb new file mode 100644 index 00000000..59ac9e46 --- /dev/null +++ b/backend/spec/models/ranked_enum_spec.rb @@ -0,0 +1,50 @@ +require "rails_helper" + +class MockClassSkeleton < RankedEnum +end + +class MockClassOverride < RankedEnum + class << self + def all_ids + %w[one two three] + end + end +end + +RSpec.describe RankedEnum do + describe MockClassSkeleton do + it "yields all IDs associated with the class" do + all_ids = MockClassSkeleton.all_ids + + expect(all_ids).to eq [] + end + end + + describe MockClassOverride do + it "yields all IDs associated with the class" do + all_ids = MockClassOverride.all_ids + + expect(all_ids).to eq ["one", "two", "three"] + end + + it "searches for a specific ID" do + searched_id = MockClassOverride.find("two") + + expect(searched_id.id).to eq "two" + end + + # TODO: Actually make this test grab the cache + it "prints out all IDs from cache" do + all_ids = MockClassOverride.all + + expect(all_ids.size).to eq 3 + expect(all_ids.last.id).to eq "three" + end + + it "creates a translatable name (that does not exist in the code base) for a ranked enum model instance" do + mock = MockClassOverride.new("some-id", "some-rank") + + expect(mock.name).to eq "Translation missing: en.mock_class_override.some-id" + end + end +end diff --git a/backend/spec/services/charts_pattern_spec.rb b/backend/spec/services/charts_pattern_spec.rb new file mode 100644 index 00000000..b78ed307 --- /dev/null +++ b/backend/spec/services/charts_pattern_spec.rb @@ -0,0 +1,45 @@ +require "rails_helper" + +RSpec.describe ChartsPattern do + it "instantiates a ChartPattern instance" do + user = create(:user) + pattern = create(:pattern, encrypted_user_id: user.encrypted_id) + + chart_pattern = ChartsPattern.new({start_at: pattern.start_at, end_at: pattern.end_at, pattern: pattern}) + + expect(chart_pattern.pattern.id).to eq pattern.id + end + + it "generates chart data from a ChartPattern" do + user = create(:user) + pattern = create(:pattern, encrypted_user_id: user.encrypted_id) + + chart_pattern = ChartsPattern.new({start_at: pattern.start_at, end_at: pattern.end_at, pattern: pattern}) + chart_data = chart_pattern.chart_data + + expect(chart_data[:pattern_name]).to eq pattern.name + expect(chart_data[:author_email]).to eq user.email + end + + it "generates chart data from a ChartPattern with a valid category" do + user = create(:user) + pattern = create(:pattern, encrypted_user_id: user.encrypted_id, includes: [{category: "treatments"}]) + + chart_pattern = ChartsPattern.new({start_at: pattern.start_at, end_at: pattern.end_at, pattern: pattern}) + chart_data = chart_pattern.chart_data + + expect(chart_data[:pattern_name]).to eq pattern.name + expect(chart_data[:author_email]).to eq user.email + end + + it "generates chart data from a ChartPattern with untracked category" do + user = create(:user) + pattern = create(:pattern, encrypted_user_id: user.encrypted_id, includes: [{category: "not-a-category"}]) + + chart_pattern = ChartsPattern.new({start_at: pattern.start_at, end_at: pattern.end_at, pattern: pattern}) + chart_data = chart_pattern.chart_data + + expect(chart_data[:pattern_name]).to eq pattern.name + expect(chart_data[:author_email]).to eq user.email + end +end