1
1
import logging
2
+ from decimal import Decimal
2
3
from unittest import IsolatedAsyncioTestCase
3
4
from unittest .mock import AsyncMock
4
5
5
6
import pytest
6
7
from playwright .async_api import Error as PlaywrightError
7
8
from scrapy import Spider
8
9
from scrapy .http .headers import Headers
9
-
10
+ from scrapy . settings import Settings
10
11
from scrapy_playwright ._utils import (
11
12
_NAVIGATION_ERROR_MSG ,
12
13
_encode_body ,
14
+ _get_float_setting ,
13
15
_get_header_value ,
14
16
_get_page_content ,
15
17
_maybe_await ,
@@ -122,20 +124,19 @@ async def test_encode_mismatch(self):
122
124
123
125
124
126
class TestHeaderValue (IsolatedAsyncioTestCase ):
125
- async def test_get_header_ok (self ):
127
+ async def test_get_header_value (self ):
126
128
async def _identity (x ):
127
129
return x
128
130
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" )
133
135
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
139
140
140
141
141
142
class TestMaybeAwait (IsolatedAsyncioTestCase ):
@@ -149,3 +150,28 @@ async def _awaitable_identity(x):
149
150
assert await _maybe_await ("foo" ) == "foo"
150
151
assert await _maybe_await ("bar" ) == "bar"
151
152
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