File size: 2,676 Bytes
c1e08a0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""Tests for the ViewTextManager class."""

import pytest

from improvisation_lab.domain.composition import PhraseData
from improvisation_lab.presentation.melody_practice.view_text_manager import \
    ViewTextManager
from improvisation_lab.service.melody_practice_service import PitchResult


class TestViewTextManager:

    @pytest.fixture
    def init_module(self):
        self.text_manager = ViewTextManager()

    @pytest.mark.usefixtures("init_module")
    def test_initialize_text(self):
        self.text_manager.initialize_text()
        assert self.text_manager.phrase_text == "No phrase data"
        assert self.text_manager.result_text == "Ready to start... (waiting for audio)"

    @pytest.mark.usefixtures("init_module")
    def test_terminate_text(self):
        self.text_manager.terminate_text()
        assert self.text_manager.phrase_text == "Session Stopped"
        assert self.text_manager.result_text == "Practice ended"

    @pytest.mark.usefixtures("init_module")
    def test_set_waiting_for_audio(self):
        self.text_manager.set_waiting_for_audio()
        assert self.text_manager.result_text == "Waiting for audio..."

    @pytest.mark.usefixtures("init_module")
    def test_update_pitch_result(self):
        pitch_result = PitchResult(
            target_note="C", current_base_note="A", is_correct=False, remaining_time=2.5
        )
        self.text_manager.update_pitch_result(pitch_result)
        assert (
            self.text_manager.result_text
            == "Target: C | Your note: A | Remaining: 2.5s"
        )

    @pytest.mark.usefixtures("init_module")
    def test_update_phrase_text_no_phrases(self):
        result = self.text_manager.update_phrase_text(0, [])
        assert result == "No phrase data"
        assert self.text_manager.phrase_text == "No phrase data"

    @pytest.mark.usefixtures("init_module")
    def test_update_phrase_text_with_phrases(self):
        phrases = [
            PhraseData(
                notes=["C", "E", "G"],
                chord_name="Cmaj7",
                scale_info="C major",
                length=4,
            ),
            PhraseData(
                notes=["A", "C", "E"],
                chord_name="Amin7",
                scale_info="A minor",
                length=4,
            ),
        ]
        self.text_manager.update_phrase_text(0, phrases)
        expected_text = "Phrase 1: Cmaj7\nC -> E -> G\nNext: Amin7 (A)"
        assert self.text_manager.phrase_text == expected_text

        self.text_manager.update_phrase_text(1, phrases)
        expected_text = "Phrase 2: Amin7\nA -> C -> E"
        assert self.text_manager.phrase_text == expected_text