File size: 2,781 Bytes
20e57f9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import pytest
#from'summarizer.summarizer import process_text
from summarizer.summarizer import process_text


def test_process_text_success(mocker, sample_text):
    """

    When you create a pipeline, it's a two-step process:



    # Step 1: Create the pipeline

    summarizer = pipeline("summarization", model="t5-base")

    # Step 2: Use the pipeline

    summary = summarizer(text)



    # This works because it matches Step 1 - creating the pipeline

    mock_pipeline.assert_called_once_with("summarization", model="t5-base")



    # This doesn't work because it's trying to assert Step 2

    mock_pipeline.assert_called_once_with(sample_text, model="t5-base")



    """
    # If using: from transformers import pipeline in summarizer.py
    # This works because it matches Step 1 - creating the pipeline
    mock_pipeline = mocker.patch('summarizer.summarizer.pipeline')

    # If using: import transformers
    #mock_pipeline = mocker.patch('summarizer.summarizer.transformers.pipeline')
    

    mock_summarizer = mock_pipeline.return_value
    mock_summarizer.return_value = [{'summary_text': 'Test summary'}]
    #mock_pipeline.return_value.return_value = [{'summary_text': 'Test summary'}]
 
    result = process_text(sample_text.strip())

    #print("result: ", result) #for debugging purpose
    assert result == 'Test summary'
    mock_pipeline.assert_called_once_with("summarization", model="t5-base")
    mock_summarizer.assert_called_once_with(sample_text.strip(), max_length=180)
    #mock_pipeline.assert_called_once_with(sample_text, model="t5-base")

def test_process_text_with_custom_model(mocker, sample_text):
    mock_pipeline = mocker.patch('summarizer.summarizer.pipeline')
    mock_summarizer = mock_pipeline.return_value
    mock_summarizer.return_value = [{'summary_text': 'Test summary'}]
    
    custom_model = "t5-small"
    result = process_text(sample_text.strip(), model=custom_model)
    
    print(result) # print out result for debugging purpose
    
    assert result == 'Test summary'
    #mock_pipeline.assert_called_once_with("summarization", model=custom_model)
    mock_summarizer.assert_called_once_with(sample_text.strip(), max_length=180)

def test_process_text_failure(mocker, sample_text):
    mock_pipeline = mocker.patch('summarizer.summarizer.pipeline')
    mock_summarizer = mock_pipeline.return_value
    mock_summarizer.return_value = [{'summary_text': 'Test summary'}]
    mock_pipeline.side_effect = Exception("Model error")

    with pytest.raises(Exception) as exc_info:
        process_text(sample_text.strip())
         
    print("Exception String: ", str(exc_info.value)) # for debugging purpose
    assert "Summarization failed" in str(exc_info.value)