/*   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 .
     07 aug 2019
*/
:- module(telegrambot_test, [
	      test_pred/2
          ]).
/**  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).