File size: 4,703 Bytes
05a5e3f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6dc2f9f
 
 
 
 
 
05a5e3f
 
 
 
 
 
 
 
 
 
 
c42dbe0
 
 
 
 
 
 
 
 
 
 
 
 
 
05a5e3f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
baf0ff1
 
 
 
 
 
 
 
 
 
 
 
 
05a5e3f
 
 
 
 
 
 
 
 
 
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import pytest

from src.rag.input_handler import InputHandler


@pytest.mark.parametrize(
    "message",
    [
        "asdfkjhasdf 12345 !!!????",
        "!!!????",
        "qwer zxcv asdf",
        "bcdfghjklmnp",
        "12345 !!!????",
        "sdfghjkllkjh",
        "aklwjkenmjk",
        "oekeolw 12112",
        "2o2oksmd,s",
        "olll.skldaal",
        "lsopwoelkfl",
        "1qokimjdk",
    ],
)
def test_process_input_rejects_probable_gibberish(message):
    processed, is_valid = InputHandler.process_input(message, [])

    assert not is_valid
    assert processed == message.strip()


@pytest.mark.parametrize(
    "message",
    [
        "What are the admission requirements for the EMBA?",
        "Can I book a consultation?",
        "IEMBA",
        "emba X",
        "yes",
        "Nein",
        "St. Gallen",
        "CV",
        "EMBA 2026",
        "Zurich 8000",
        "leadership 2026",
        "Was sind die nächsten Schritte im Bewerbungsprozess?",
        # Regression: real queries the gibberish heuristic wrongly rejected.
        # German compound words contain long consonant runs ("deutschsprachige");
        # long English sentences false-positived once their words were concatenated.
        "Wie lange dauert der deutschsprachige EMBA HSG?",
        "Give me a short overview of all three executive MBA programmes.",
        "Welche Weiterbildungsmöglichkeiten bietet die Universität?",
        "Ich interessiere mich für ein MBA mit Schwerpunkt nachhaltige Unternehmensführung.\nberufsbegleitend.",
        "Ich habe gerade meinen Bachelor abgeschlossen und 2 Jahre Berufserfahrung. Kann ich mich für den Executive MBA bewerben?",
    ],
)
def test_process_input_accepts_normal_inputs(message):
    processed, is_valid = InputHandler.process_input(message, [])

    assert is_valid
    assert processed == message.strip()


@pytest.mark.parametrize(
    "message",
    [
        "\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0445\u043e\u0447\u0443 \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 EMBA",
        "\u0645\u0633\u0627\u0621 \u0627\u0644\u062e\u064a\u0631\u060c \u0623\u0631\u064a\u062f \u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u0645\u0632\u064a\u062f \u0639\u0646 EMBA",
    ],
)
def test_process_input_accepts_unsupported_languages_for_language_fallback(message):
    processed, is_valid = InputHandler.process_input(message, [])

    assert is_valid
    assert processed == message.strip()


@pytest.mark.parametrize(
    "message",
    [
        "How much does the IEMBA cost in CHF?",
        "Does emba X require 10 years of experience?",
        "I have 12 years of experience and 4 years of leadership.",
        "Can you compare EMBA, IEMBA, and emba X?",
        "When is the next application deadline?",
        "I live in Zurich. Is the programme hybrid or in person?",
        "Can I speak with admissions?",
        "Do I need GMAT or TOEFL?",
        "What documents should I prepare: CV, diploma, references?",
        "Is the programme compatible with a full-time job?",
        "Wie hoch sind die Studiengebühren?",
        "Welche Unterlagen brauche ich für die Bewerbung?",
        "Ich habe 8 Jahre Berufserfahrung und 3 Jahre Führungserfahrung.",
        "Kann ich das Programm berufsbegleitend absolvieren?",
        "Gibt es Module im Ausland?",
        "Wann ist die nächste Bewerbungsfrist?",
        "Ich wohne in Zürich. Gibt es Präsenztermine?",
        "Brauche ich GMAT oder TOEFL?",
        "Können Sie EMBA, IEMBA und emba X vergleichen?",
        "Ich möchte mit der Studienberatung sprechen.",
        "Guten Tag,\nich interessiere mich für das EMBA HSG.",
        "Hello - I am comparing EMBA vs. IEMBA.",
        "Bewerbungsfrist?",
        "Studiengebühren",
        "duration",
        "GMAT/TOEFL",
        "CV?",
        "IEMBA 2026?",
        "St.Gallen?",
        "Zurich/St.Gallen",
        "EMBA, IEMBA oder emba X?",
        "Deutsch or English?",
        "I prefer Deutsch.",
        "Wie bitte?",
        "More about fees?",
        "Kosten + Termine?",
        "MBA in St. Gallen",
        "I have 9 years, no management yet.",
        "Ich habe 9 Jahre, aber keine Führung.",
    ],
)
def test_process_input_accepts_realistic_user_queries(message):
    processed, is_valid = InputHandler.process_input(message, [])

    assert is_valid
    assert processed == message.strip()


def test_process_input_keeps_numeric_follow_up_handling():
    processed, is_valid = InputHandler.process_input("5", [])

    assert is_valid
    assert "5 years" in processed.lower()