11import logging
2+ from decimal import Decimal
23from unittest import IsolatedAsyncioTestCase
34from unittest .mock import AsyncMock
45
56import pytest
67from playwright .async_api import Error as PlaywrightError
78from scrapy import Spider
89from scrapy .http .headers import Headers
9-
10+ from scrapy . settings import Settings
1011from scrapy_playwright ._utils import (
1112 _NAVIGATION_ERROR_MSG ,
1213 _encode_body ,
14+ _get_float_setting ,
1315 _get_header_value ,
1416 _get_page_content ,
1517 _maybe_await ,
@@ -122,20 +124,19 @@ async def test_encode_mismatch(self):
122124
123125
124126class TestHeaderValue (IsolatedAsyncioTestCase ):
125- async def test_get_header_ok (self ):
127+ async def test_get_header_value (self ):
126128 async def _identity (x ):
127129 return x
128130
129- resource = AsyncMock ()
130- resource .header_value = _identity
131- assert "asdf" == await _get_header_value (resource , "asdf" )
132- assert "qwerty" == await _get_header_value (resource , "qwerty" )
131+ res1 = AsyncMock ()
132+ res1 .header_value = _identity
133+ assert "asdf" == await _get_header_value (res1 , "asdf" )
134+ assert "qwerty" == await _get_header_value (res1 , "qwerty" )
133135
134- async def test_get_header_exception (self ):
135- resource = AsyncMock ()
136- resource .header_value .side_effect = Exception ("nope" )
137- assert await _get_header_value (resource , "asdf" ) is None
138- assert await _get_header_value (resource , "qwerty" ) is None
136+ res2 = AsyncMock ()
137+ res2 .header_value .side_effect = Exception ("nope" )
138+ assert await _get_header_value (res2 , "asdf" ) is None
139+ assert await _get_header_value (res2 , "qwerty" ) is None
139140
140141
141142class TestMaybeAwait (IsolatedAsyncioTestCase ):
@@ -149,3 +150,28 @@ async def _awaitable_identity(x):
149150 assert await _maybe_await ("foo" ) == "foo"
150151 assert await _maybe_await ("bar" ) == "bar"
151152 assert await _maybe_await (1234 ) == 1234
153+
154+
155+ class TestGetFloatSetting (IsolatedAsyncioTestCase ):
156+ async def test_get_float_setting (self ):
157+ settings = Settings (
158+ {
159+ "ZERO" : 0 ,
160+ "FLOAT" : 1.5 ,
161+ "DECIMAL" : Decimal ("2.5" ),
162+ "INT" : 3 ,
163+ "NUMERIC_STRING" : "123" ,
164+ "NON_NUMERIC_STRING" : "asdf" ,
165+ "NONE" : None ,
166+ "LIST" : [1 , 2 , 3 ],
167+ }
168+ )
169+ assert _get_float_setting (settings , "ZERO" ) == 0.0
170+ assert _get_float_setting (settings , "FLOAT" ) == 1.5
171+ assert _get_float_setting (settings , "DECIMAL" ) == 2.5
172+ assert _get_float_setting (settings , "INT" ) == 3.0
173+ assert _get_float_setting (settings , "NUMERIC_STRING" ) == 123
174+ assert _get_float_setting (settings , "NON_NUMERIC_STRING" ) is None
175+ assert _get_float_setting (settings , "NONE" ) is None
176+ assert _get_float_setting (settings , "LIST" ) is None
177+ assert _get_float_setting (settings , "MISSING_KEY" ) is None
0 commit comments