
/*   test
     Author: GimÃ©nez, Christian.

     Copyright (C) 2019 GimÃ©nez, Christian

     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or
     at your option) any later version.

     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.

     07 aug 2019
*/
:- module(telegrambot_test, [
	      test_pred/2
          ]).
/** <module> telegrambot_test: 


@author Christian Gimenez
@license GPLv3
*/

:- license(gplv3).

:- use_module('../prolog/telegrambot').

test_pred(_Message, _Params) :-
    asserta(telegrambot_test:test_passed).
test_pred_b(_Message, _Params) :-
    asserta(telegrambot_test:test_passed_b).

:- command_handler(start, telegrambot_test:test_pred).
:- command_handler(next, telegrambot_test:test_pred_b).

%% :- use_token('').

%% :- command_handler('start', help).

%% help(Message, Params) :-
%%     member(chat=json(ChatData), Message),
%%     member(id=ChatID, ChatData),
%%     send_message(ChatID, 'Hello!', [], _R).


:- begin_tests(telegrambot, []).

test(use_token) :-
    use_token('hello world'),
    telegrambot:token('hello world').

test(is_command, []) :-
    Msg = json([ update_id = 381390181,
		 message = json([ (message_id = 1),
				  (from = json([ (id = 1234567),
						 (is_bot = @(false)),
						 (first_name = 'first'),
						 (username = 'user'),
						 (language_code = en)
					       ])),
				  (chat = json([ (id = 1234567),
						 (first_name = 'First'),
						 (username = 'user'),
						 (type = private)
					       ])),
				  (date = 1565066895),
				  (text = '/start'),
				  (entities =
				   [json([offset=0,length=6,type=bot_command])])
				])
	       ]),
    telegrambot:is_command(Msg, Cmd, Params),
    Cmd = start,
    Params = [].


test(process_update_message, []) :-
    retractall(telegrambot_test:test_passed),
    Msg = json([ update_id = 381390181,
		 message = json([ (message_id = 1),
				  (from = json([ (id = 1234567),
						 (is_bot = @(false)),
						 (first_name = 'first'),
						 (username = 'user'),
						 (language_code = en)
					       ])),
				  (chat = json([ (id = 1234567),
						 (first_name = 'First'),
						 (username = 'user'),
						 (type = private)
					       ])),
				  (date = 1565066895),
				  (text = '/start'),
				  (entities =
				   [json([offset=0,length=6,type=bot_command])])
				])
	       ]),
    
    telegrambot:process_update_message(Msg),
    telegrambot_test:test_passed.

test(process_update_json, []) :-
    retractall(telegrambot_test:test_passed),
    retractall(telegrambot_test:test_passed_b),
    Msg1 = json([update_id=38298123,
                 message=json([message_id=1,
                               from=json([id=1234567,
                                          is_bot= @(false),
                                          first_name='first',
                                          username='user',
                                          language_code=en]),
                               chat=json([id=234567,
                                          first_name='first',
                                          username='user',
                                          type=private]),
                               date=1570374390,
                               text='/start',
                               entities=[json([offset=0,
                                               length=6,
                                               type=bot_command
                                              ])]])]),
    Msg2 = json([update_id=38298124,
                 message=json([message_id=2,
                               from=json([id=87654,
                                          is_bot= @(false),
                                          first_name='first',
                                          username='user',
                                          language_code=en]),
                               chat=json([id=234567,
                                          first_name='first',
                                          username='user',
                                          type=private]),
                               date=1570374417,
                               text='/next',
                               entities=[json([offset=0,
                                               length=5,
                                               type=bot_command
                                              ])]])]),
    Update = json([ok= @(true),
                   result=[
                       Msg1, Msg2
                   ]]),
    telegrambot:process_update_json(Update),

    telegrambot_test:test_passed,
    telegrambot_test:test_passed_b.
    

:- end_tests(telegrambot).
