11"""Test fortigate_base.py"""
2+ from collections import OrderedDict
23from unittest .mock import patch
34
45import pytest
6+ import requests_mock
57from pytest_mock import MockerFixture
68from requests import Session
9+ from requests_mock import Mocker
710
811from fortigate_api import fortigate_base
912from fortigate_api .fortigate import FortiGate
@@ -96,12 +99,53 @@ def test__url(scheme, host, port, expected):
9699 assert actual == expected
97100
98101
102+ # ============================ login =============================
103+
104+ # noinspection PyUnresolvedReferences
105+ @pytest .mark .parametrize ("token, expected, headers" , [
106+ ("" , "TOKEN" , ("X-CSRFTOKEN" , "TOKEN" )),
107+ ("TOKEN" , "" , None ),
108+ ])
109+ def test__login (token , expected , headers ):
110+ """FortiGateBase.login() for username."""
111+ api = FortiGate (host = "HOST" , token = token )
112+ with requests_mock .Mocker () as mock :
113+ if token :
114+ mock .get ("https://host/api/v2/monitor/system/status" )
115+ else :
116+ mock .post ("https://host/logincheck" )
117+
118+ with patch ("fortigate_api.FortiGate._get_token_from_cookies" , return_value = expected ):
119+ api .login ()
120+ assert isinstance (api ._session , Session )
121+ store : OrderedDict = getattr (api ._session .headers , "_store" )
122+ actual = store .get ("x-csrftoken" )
123+ assert actual == headers
124+
125+
126+ # =========================== helpers ============================
127+
128+ def test__get_session (api : FortiGate , mocker : MockerFixture ):
129+ """FortiGateBase._get_session()"""
130+ # session
131+ api ._session = Session ()
132+ session = api ._get_session ()
133+ assert isinstance (session , Session )
134+
135+ # login
136+ api ._session = None
137+ mock_response = mocker .Mock ()
138+ mocker .patch (target = "requests.Session.post" , return_value = mock_response )
139+ mocker .patch (target = "requests.Session.get" , return_value = tst .crate_response (200 ))
140+ with patch ("fortigate_api.FortiGate._get_token_from_cookies" , return_value = "token" ):
141+ session = api ._get_session ()
142+ assert isinstance (session , Session ) is True
143+
144+
99145@pytest .mark .parametrize ("name, expected" , [
100146 ("ccsrftoken" , "token" ), # < v7
101147 ("ccsrftoken_443" , "token" ), # >= v7
102148 ("ccsrftoken_443_3334d10" , "token" ), # >= v7
103- ("ccsrftokenother-name" , ValueError ),
104- ("ccsrftoken-other-name" , ValueError ),
105149 ("other-name" , ValueError ),
106150])
107151def test__get_token_from_cookies (api : FortiGate , name , expected ):
@@ -115,6 +159,22 @@ def test__get_token_from_cookies(api: FortiGate, name, expected):
115159 api ._get_token_from_cookies (session = session )
116160
117161
162+ @pytest .mark .parametrize ("string, password, expected" , [
163+ ("" , "" , "" ),
164+ ("" , "secret" , "" ),
165+ ("text" , "" , "text" ),
166+ ("text" , "secret" , "text" ),
167+ ("_secret_" , "secret" , "_<hidden>_" ),
168+ ("_%5B_" , "secret" , "_%5B_" ),
169+ ("_secret%5B_" , "secret[" , "_<hidden>_" ),
170+ ])
171+ def test__hide_secret (string , password , expected ):
172+ """FortiGateBase._hide_secret()"""
173+ fgt = FortiGate (host = "host" , password = password )
174+ actual = fgt ._hide_secret (string = string )
175+ assert actual == expected
176+
177+
118178@pytest .mark .parametrize ("kwargs, scheme, expected" , [
119179 ({}, "https" , 443 ),
120180 ({}, "http" , 80 ),
@@ -160,41 +220,6 @@ def test__valid_url(kwargs, url, expected):
160220 assert actual == expected
161221
162222
163- @pytest .mark .parametrize ("string, password, expected" , [
164- ("" , "" , "" ),
165- ("" , "secret" , "" ),
166- ("text" , "" , "text" ),
167- ("text" , "secret" , "text" ),
168- ("_secret_" , "secret" , "_<hidden>_" ),
169- ("_%5B_" , "secret" , "_%5B_" ),
170- ("_secret%5B_" , "secret[" , "_<hidden>_" ),
171- ])
172- def test__hide_secret (string , password , expected ):
173- """FortiGateBase._hide_secret()"""
174- fgt = FortiGate (host = "host" , password = password )
175- actual = fgt ._hide_secret (string = string )
176- assert actual == expected
177-
178-
179- # =========================== helpers ============================
180-
181- def test__get_session (api : FortiGate , mocker : MockerFixture ):
182- """FortiGateBase._get_session()"""
183- # session
184- api ._session = Session ()
185- session = api ._get_session ()
186- assert isinstance (session , Session )
187-
188- # login
189- api ._session = None
190- mock_response = mocker .Mock ()
191- mocker .patch (target = "requests.Session.post" , return_value = mock_response )
192- mocker .patch (target = "requests.Session.get" , return_value = tst .crate_response (200 ))
193- with patch ("fortigate_api.FortiGate._get_token_from_cookies" , return_value = "token" ):
194- session = api ._get_session ()
195- assert isinstance (session , Session ) is True
196-
197-
198223# =========================== helpers ============================
199224
200225@pytest .mark .parametrize ("kwargs, expected" , [
0 commit comments