discourse-ai/spec/models/model_accuracy_spec.rb

81 lines
2.5 KiB
Ruby

# frozen_string_literal: true
require "rails_helper"
describe ModelAccuracy do
describe "#calculate_accuracy" do
let(:accuracy) { ModelAccuracy.new(model: "test_model", classification_type: "test") }
it "returns 0 if we had no feedback" do
expect(accuracy.calculate_accuracy).to eq(0.0)
end
it "returns 50 if we had mixed feedback" do
accuracy.flags_agreed = 1
accuracy.flags_disagreed = 1
expect(accuracy.calculate_accuracy).to eq(50)
end
it "always round the number" do
accuracy.flags_agreed = 1
accuracy.flags_disagreed = 2
expect(accuracy.calculate_accuracy).to eq(33)
end
end
describe ".adjust_model_accuracy" do
let!(:accuracy) { ModelAccuracy.create!(model: "test_model", classification_type: "test") }
def build_reviewable(klass, test_model_verdict)
klass.new(payload: { "verdicts" => { "test_model" => test_model_verdict } })
end
it "does nothing if the reviewable is not generated by this plugin" do
reviewable = build_reviewable(ReviewableFlaggedPost, true)
described_class.adjust_model_accuracy(:approved, reviewable)
expect(accuracy.reload.flags_agreed).to be_zero
expect(accuracy.flags_disagreed).to be_zero
end
it "updates the agreed flag if reviewable was approved and verdict is true" do
reviewable = build_reviewable(ReviewableAiPost, true)
described_class.adjust_model_accuracy(:approved, reviewable)
expect(accuracy.reload.flags_agreed).to eq(1)
expect(accuracy.flags_disagreed).to be_zero
end
it "updates the disagreed flag if the reviewable was approved and verdict is false" do
reviewable = build_reviewable(ReviewableAiPost, false)
described_class.adjust_model_accuracy(:approved, reviewable)
expect(accuracy.reload.flags_agreed).to be_zero
expect(accuracy.flags_disagreed).to eq(1)
end
it "updates the disagreed flag if reviewable was rejected and verdict is true" do
reviewable = build_reviewable(ReviewableAiPost, true)
described_class.adjust_model_accuracy(:rejected, reviewable)
expect(accuracy.reload.flags_agreed).to be_zero
expect(accuracy.flags_disagreed).to eq(1)
end
it "updates the agreed flag if the reviewable was rejected and verdict is false" do
reviewable = build_reviewable(ReviewableAiPost, false)
described_class.adjust_model_accuracy(:rejected, reviewable)
expect(accuracy.reload.flags_agreed).to eq(1)
expect(accuracy.flags_disagreed).to be_zero
end
end
end