github.com/sharovik/devbot@v1.0.1-0.20240308094637-4a0387c40516/internal/service/message/conversation/helper_test.go (about)

     1  package conversation
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	_time "github.com/sharovik/devbot/internal/service/time"
     8  
     9  	"github.com/sharovik/devbot/internal/database"
    10  
    11  	"github.com/sharovik/devbot/internal/dto"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestGetCurrentConversations(t *testing.T) {
    16  	currentConversations["_test_channel_"] = Conversation{
    17  		ScenarioID:         0,
    18  		ScenarioQuestionID: 0,
    19  		LastQuestion: dto.BaseChatMessage{
    20  			Channel:           "_test_channel_",
    21  			Text:              "Testing",
    22  			AsUser:            false,
    23  			Ts:                time.Time{},
    24  			DictionaryMessage: dto.DictionaryMessage{},
    25  			OriginalMessage:   dto.BaseOriginalMessage{},
    26  		},
    27  	}
    28  
    29  	currentConversations["_test_channel2_"] = Conversation{
    30  		ScenarioID:         0,
    31  		ScenarioQuestionID: 0,
    32  		LastQuestion: dto.BaseChatMessage{
    33  			Channel:           "_test_channel2_",
    34  			Text:              "Testing",
    35  			AsUser:            false,
    36  			Ts:                time.Time{},
    37  			DictionaryMessage: dto.DictionaryMessage{},
    38  			OriginalMessage:   dto.BaseOriginalMessage{},
    39  		},
    40  	}
    41  
    42  	list := GetCurrentConversations()
    43  	assert.NotEmpty(t, list)
    44  	assert.NotEmpty(t, list["_test_channel_"])
    45  	assert.NotEmpty(t, list["_test_channel2_"])
    46  }
    47  
    48  func TestAddConversation(t *testing.T) {
    49  	scenario := database.EventScenario{}
    50  	AddConversation(scenario, dto.BaseChatMessage{
    51  		Channel:           "_test_channel_",
    52  		Text:              "Testing",
    53  		AsUser:            false,
    54  		Ts:                time.Time{},
    55  		DictionaryMessage: dto.DictionaryMessage{},
    56  		OriginalMessage:   dto.BaseOriginalMessage{},
    57  	})
    58  
    59  	list := GetCurrentConversations()
    60  	assert.NotEmpty(t, list)
    61  	assert.NotEmpty(t, list["_test_channel_"])
    62  }
    63  
    64  func TestCleanUpExpiredMessages(t *testing.T) {
    65  	now := _time.Service.Now()
    66  	scenario := database.EventScenario{}
    67  
    68  	AddConversation(scenario, dto.BaseChatMessage{
    69  		Channel:           "_test_channel_",
    70  		Text:              "Testing",
    71  		AsUser:            false,
    72  		Ts:                now.Add(-time.Second * 600),
    73  		DictionaryMessage: dto.DictionaryMessage{},
    74  		OriginalMessage:   dto.BaseOriginalMessage{},
    75  	})
    76  
    77  	AddConversation(scenario, dto.BaseChatMessage{
    78  		Channel:           "_test_channel2_",
    79  		Text:              "Testing",
    80  		AsUser:            false,
    81  		Ts:                now.Add(time.Second * 600),
    82  		DictionaryMessage: dto.DictionaryMessage{},
    83  		OriginalMessage:   dto.BaseOriginalMessage{},
    84  	})
    85  
    86  	CleanUpExpiredMessages()
    87  
    88  	assert.NotEmpty(t, currentConversations)
    89  	assert.Equal(t, 1, len(currentConversations))
    90  	assert.NotEmpty(t, currentConversations["_test_channel2_"])
    91  }
    92  
    93  func TestGetConversation(t *testing.T) {
    94  	now := _time.Service.Now()
    95  	currentConversations = map[string]Conversation{}
    96  	scenario := database.EventScenario{}
    97  
    98  	AddConversation(scenario, dto.BaseChatMessage{
    99  		Channel:           "_test_channel_",
   100  		Text:              "Testing",
   101  		AsUser:            false,
   102  		Ts:                now.Add(time.Second * 600),
   103  		DictionaryMessage: dto.DictionaryMessage{},
   104  		OriginalMessage:   dto.BaseOriginalMessage{},
   105  	})
   106  
   107  	conversation := GetConversation("_test_channel_")
   108  
   109  	assert.NotEmpty(t, conversation)
   110  	assert.Equal(t, "Testing", conversation.LastQuestion.Text)
   111  
   112  	conversation = GetConversation("_test_channel2_")
   113  	assert.Empty(t, conversation)
   114  }
   115  
   116  func TestDeleteConversation(t *testing.T) {
   117  	scenario := database.EventScenario{}
   118  	AddConversation(scenario, dto.BaseChatMessage{
   119  		Channel:           "_test_channel_",
   120  		Text:              "Testing",
   121  		AsUser:            false,
   122  		Ts:                time.Time{},
   123  		DictionaryMessage: dto.DictionaryMessage{},
   124  		OriginalMessage:   dto.BaseOriginalMessage{},
   125  	})
   126  
   127  	assert.NotEmpty(t, currentConversations["_test_channel_"])
   128  	FinaliseConversation("_test_channel_")
   129  	assert.Empty(t, currentConversations["_test_channel_"])
   130  }