| defmodule Medicode.FeedbackButtonTest do |
| use MedicodeWeb.ConnCase, async: true |
|
|
| import Phoenix.LiveViewTest |
|
|
| import Medicode.{ |
| AccountsFixtures, |
| TranscriptionChunksFixtures, |
| TranscriptionChunkCodeVectorsFixtures, |
| CodeVectorsFixtures, |
| CodeFeedbacksFixtures |
| } |
|
|
| alias Medicode.Repo |
| alias MedicodeWeb.Components.TranscriptionTextCodingsComponent |
|
|
| describe "feedback_button" do |
| setup do |
| insert_code_vector_fixtures() |
|
|
| user = user_fixture() |
| chunk = transcription_chunk_fixture() |
| code_vector = code_vector_fixture() |
|
|
| transcription_chunk_code_vector = |
| transcription_chunk_code_vector_fixture(%{ |
| chunk_id: chunk.id, |
| code_vector_id: code_vector.id |
| }) |
| |> Repo.preload([:code_vector, :assigned_by_user]) |
|
|
| positive_code_feedback = code_feedback_fixture(%{response: true}) |
| negative_code_feedback = code_feedback_fixture(%{response: false}) |
|
|
| %{ |
| user: user, |
| chunk: chunk, |
| code_vector: code_vector, |
| transcription_chunk_code_vector: transcription_chunk_code_vector, |
| positive_code_feedback: positive_code_feedback, |
| negative_code_feedback: negative_code_feedback |
| } |
| end |
|
|
| test "renders code vector text", %{ |
| user: user, |
| chunk: chunk, |
| code_vector: code_vector, |
| transcription_chunk_code_vector: transcription_chunk_code_vector |
| } do |
| component = |
| render_component(TranscriptionTextCodingsComponent, |
| id: transcription_chunk_code_vector.id, |
| code_feedback: nil, |
| chunk_id: chunk.id, |
| code_vectors_with_feedback: [{transcription_chunk_code_vector, nil}], |
| score: 1.0, |
| text: chunk.text, |
| weighting: [1.0], |
| assigned_by_user: nil, |
| current_user: user, |
| myself: transcription_chunk_code_vector.id |
| ) |
|
|
| assert component =~ chunk.text |
| assert component =~ code_vector.description |
| assert component =~ code_vector.code |
| assert component =~ ~s(title="Similarity score: 1.0. Weighting: 1.0 \(1\)") |
| assert component =~ ~s(<img src="/images/thumbs-up.svg") |
| assert component =~ ~s(<img src="/images/thumbs-down.svg") |
| end |
|
|
| test "renders feedback button as selected for user with positive code feedback", %{ |
| user: user, |
| chunk: chunk, |
| transcription_chunk_code_vector: transcription_chunk_code_vector, |
| positive_code_feedback: code_feedback |
| } do |
| component = |
| render_component(TranscriptionTextCodingsComponent, |
| id: transcription_chunk_code_vector.id, |
| chunk_id: chunk.id, |
| code_vectors_with_feedback: [{transcription_chunk_code_vector, code_feedback}], |
| score: 1.0, |
| text: chunk.text, |
| weighting: [1.0], |
| assigned_by_user: nil, |
| current_user: user, |
| myself: transcription_chunk_code_vector.id |
| ) |
|
|
| assert component =~ ~s(<button data-feedback="positive") |
| end |
|
|
| test "renders feedback button as de-selected for user with negative code feedback", %{ |
| user: user, |
| chunk: chunk, |
| transcription_chunk_code_vector: transcription_chunk_code_vector, |
| negative_code_feedback: code_feedback |
| } do |
| component = |
| render_component(TranscriptionTextCodingsComponent, |
| id: transcription_chunk_code_vector.id, |
| chunk_id: chunk.id, |
| code_vectors_with_feedback: [{transcription_chunk_code_vector, code_feedback}], |
| score: 1.0, |
| text: chunk.text, |
| weighting: [1.0], |
| assigned_by_user: nil, |
| current_user: user, |
| myself: transcription_chunk_code_vector.id |
| ) |
|
|
| assert component =~ ~s(<button data-feedback="negative") |
| end |
| end |
| end |
|
|