File size: 1,640 Bytes
a2eaad1
23ded75
e950355
9506837
23ded75
e950355
9506837
 
 
 
23ded75
9506837
 
23ded75
9506837
e950355
 
23ded75
9506837
 
23ded75
9506837
 
 
 
e950355
9506837
 
e950355
9506837
 
 
 
a2eaad1
e950355
a2eaad1
 
23ded75
9506837
 
e4b1e43
 
 
 
a2eaad1
e4b1e43
 
 
23ded75
 
 
 
 
 
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
import sys, os
import pytest
import torch
from unittest.mock import MagicMock

# --- Create dummy replacements ---
class DummyTokenizer:
    pad_token_id = 0
    eos_token_id = 1
    chat_template = "{% for message in messages %}{{ message['role'] }}: {{ message['content'] }}{% endfor %}"

    def apply_chat_template(self, conv, tokenize=False, add_generation_prompt=True):
        return "mock_prompt"

    def __call__(self, prompt, return_tensors=None):
        # Must look like transformers output
        return {"input_ids": torch.tensor([[0, 1]])}

    def decode(self, tokens, skip_special_tokens=True):
        return "• Easy switch"


class DummyModel:
    def to(self, device): return self
    def eval(self): return self
    def generate(self, **kwargs): return torch.tensor([[0, 1, 2, 3]])


# --- Insert mocks into sys.modules before app is imported ---
sys.modules["transformers"] = MagicMock(
    AutoTokenizer=MagicMock(from_pretrained=lambda *a, **kw: DummyTokenizer()),
    AutoModelForCausalLM=MagicMock(from_pretrained=lambda *a, **kw: DummyModel())
)

# Now safe to import app
import app


# ================== Tests ==================

def test_calculate_footprint():
    total, stats = app.calculate_footprint(
        car_km=10, bus_km=5, train_km=2, air_km_week=50,
        meat_meals=3, vegetarian_meals=2, vegan_meals=1,
    )
    assert total > 0
    assert "trees" in stats
    assert isinstance(stats["trees"], int)


def test_chat_mock_runs():
    out = app.chat(messages=[{"role": "user", "content": "Hello"}], history=[])
    assert isinstance(out, str)
    assert "Easy switch" in out or "•" in out