
    },j'                         d dl Zd dlmc mZ d dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZ d dlZdZdZdZdZ G d	 d
ej*                        Zedk(  r ej0                          yy)    N)	Namespace)Path)patcha  
<html><body>
  <a href="/shop/product/G16K3LL/A/refurbished-mac-mini">
    <h3>Refurbished Mac mini Apple M4 Chip with 10-Core CPU and 10-Core GPU, Gigabit Ethernet</h3>
    <span class="price-point">$509.00</span>
  </a>
  <a href="/shop/product/G1ABC/refurbished-13-inch-macbook-air">
    <h3>Refurbished 13-inch MacBook Air Apple M4 chip with 10-Core CPU and 8-Core GPU - Sky Blue</h3>
    <span class="price-point">Now $849.00</span>
  </a>
  <a href="/shop/product/G1DEF/refurbished-15-inch-macbook-air">
    <h3>Refurbished 15-inch MacBook Air Apple M4 chip with 10-Core CPU and 10-Core GPU - Silver</h3>
    <span class="price-point">$929.00</span>
  </a>
</body></html>
a:  
<script type="application/json">
{"tiles":[
  {"productDetailsUrl":"/shop/product/g1aaa/a/Refurbished-Mac-mini-Apple-M4-Chip-with-10-Core-CPU-and-10-Core-GPU",
   "partNumber":"G1AAA/A",
   "title":"Refurbished Mac mini Apple M4 Chip with 10-Core CPU and 10-Core GPU, Gigabit Ethernet",
   "price":{"currentPrice":{"raw_amount":"679.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"512gb","tsMemorySize":"16gb"}}},
  {"productDetailsUrl":"/shop/product/g1bbb/a/Refurbished-13-inch-MacBook-Air",
   "partNumber":"G1BBB/A",
   "title":"Refurbished 13-inch MacBook Air Apple M4 chip with 10-Core CPU and 8-Core GPU - Midnight",
   "price":{"currentPrice":{"amount":"<span class=\"visuallyhidden\">Now</span>$849.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"256gb","tsMemorySize":"16gb"}}},
  {"partNumber":"G1CCC/A",
   "title":"Refurbished 15-inch MacBook Air Apple M4 chip with 10-Core CPU and 10-Core GPU - Silver",
   "price":{"currentPrice":{"raw_amount":"929.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"256gb","tsMemorySize":"16gb"}}}
]}
</script>
a  
<script type="application/json">
{"tiles":[
  {"productDetailsUrl":"/shop/product/g4eee/a/Refurbished-Mac-mini-24gb-512gb",
   "partNumber":"G4EEE/A",
   "title":"Refurbished Mac mini Apple M4 Chip with 10-Core CPU and 10-Core GPU",
   "price":{"currentPrice":{"raw_amount":"799.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"512gb","tsMemorySize":"24gb"}}},
  {"productDetailsUrl":"/shop/product/g4aaa/a/Refurbished-Mac-mini-32gb-512gb",
   "partNumber":"G4AAA/A",
   "title":"Refurbished Mac mini Apple M4 Chip with 10-Core CPU and 10-Core GPU",
   "price":{"currentPrice":{"raw_amount":"899.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"512gb","tsMemorySize":"32gb"}}},
  {"productDetailsUrl":"/shop/product/g4bbb/a/Refurbished-Mac-mini-32gb-1tb",
   "partNumber":"G4BBB/A",
   "title":"Refurbished Mac mini Apple M4 Chip with 10-Core CPU and 10-Core GPU",
   "price":{"currentPrice":{"raw_amount":"999.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"1tb","tsMemorySize":"32gb"}}},
  {"productDetailsUrl":"/shop/product/g4ccc/a/Refurbished-Mac-mini-16gb-512gb",
   "partNumber":"G4CCC/A",
   "title":"Refurbished Mac mini Apple M4 Chip with 10-Core CPU and 10-Core GPU",
   "price":{"currentPrice":{"raw_amount":"679.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"512gb","tsMemorySize":"16gb"}}},
  {"productDetailsUrl":"/shop/product/g4ddd/a/Refurbished-Mac-mini-32gb-256gb",
   "partNumber":"G4DDD/A",
   "title":"Refurbished Mac mini Apple M4 Chip with 10-Core CPU and 10-Core GPU",
   "price":{"currentPrice":{"raw_amount":"799.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"256gb","tsMemorySize":"32gb"}}}
]}
</script>
a	  
<script type="application/json">
{"tiles":[
  {"productDetailsUrl":"/shop/product/g2aaa/a/Refurbished-Mac-Studio-Apple-M2-Ultra",
   "partNumber":"G2AAA/A",
   "title":"Refurbished Mac Studio Apple M2 Ultra Chip with 24-Core CPU and 60-Core GPU",
   "price":{"currentPrice":{"raw_amount":"3999.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"1tb","tsMemorySize":"96gb"}}},
  {"productDetailsUrl":"/shop/product/g2bbb/a/Refurbished-Mac-Studio-Apple-M2-Ultra",
   "partNumber":"G2BBB/A",
   "title":"Refurbished Mac Studio Apple M2 Ultra Chip with 24-Core CPU and 76-Core GPU",
   "price":{"currentPrice":{"raw_amount":"4799.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"2tb","tsMemorySize":"128gb"}}},
  {"productDetailsUrl":"/shop/product/g2ccc/a/Refurbished-Mac-Studio-Apple-M2-Max",
   "partNumber":"G2CCC/A",
   "title":"Refurbished Mac Studio Apple M2 Max Chip with 12-Core CPU and 30-Core GPU",
   "price":{"currentPrice":{"raw_amount":"1699.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"512gb","tsMemorySize":"32gb"}}},
  {"productDetailsUrl":"/shop/product/g3aaa/a/Refurbished-14-inch-MacBook-Pro-Apple-M5",
   "partNumber":"G3AAA/A",
   "title":"Refurbished 14-inch MacBook Pro Apple M5 Pro Chip with 12-Core CPU and 16-Core GPU - Space Black",
   "price":{"currentPrice":{"raw_amount":"2499.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"1tb","tsMemorySize":"64gb"}}},
  {"productDetailsUrl":"/shop/product/g3bbb/a/Refurbished-16-inch-MacBook-Pro-Apple-M5",
   "partNumber":"G3BBB/A",
   "title":"Refurbished 16-inch MacBook Pro Apple M5 Max Chip with 16-Core CPU and 40-Core GPU - Silver",
   "price":{"currentPrice":{"raw_amount":"3499.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"1tb","tsMemorySize":"96gb"}}},
  {"productDetailsUrl":"/shop/product/g3ccc/a/Refurbished-14-inch-MacBook-Pro-Apple-M5",
   "partNumber":"G3CCC/A",
   "title":"Refurbished 14-inch MacBook Pro Apple M5 Pro Chip with 12-Core CPU and 16-Core GPU - Silver",
   "price":{"currentPrice":{"raw_amount":"1999.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"512gb","tsMemorySize":"48gb"}}},
  {"productDetailsUrl":"/shop/product/g3ddd/a/Refurbished-14-inch-MacBook-Pro-Apple-M4",
   "partNumber":"G3DDD/A",
   "title":"Refurbished 14-inch MacBook Pro Apple M4 Max Chip with 14-Core CPU and 32-Core GPU - Space Black",
   "price":{"currentPrice":{"raw_amount":"2899.00"}},
   "filters":{"dimensions":{"dimensionCapacity":"1tb","tsMemorySize":"64gb"}}}
]}
</script>
c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	RefurbishedWatcherTestsc                     t        j                  t        t         j                        }| j	                  |D cg c]  }|j
                   c}dg       | j	                  |d   j                  d       y c c}w )NG1ABCr   $849.00)watcherparse_listingLISTING_HTMLDEFAULT_URLassertEqualkeypriceselfproductsproducts      X/Users/jameslopez/projects/FindRefurbishedAppleProduct/tests/test_refurbished_watcher.py-test_parse_listing_filters_targets_and_priceszERefurbishedWatcherTests.test_parse_listing_filters_targets_and_prices}   s^    ((w7J7JKX>X''++X>	J!**I6 ?   A4c                     t        j                  t        t         j                        }| j	                  |D cg c]  }|j
                   c}dg       | j	                  |d   j                  d       y c c}w )NzG1BBB/Ar   r
   )r   r   EMBEDDED_LISTING_HTMLr   r   r   r   r   s      r   *test_parse_embedded_tiles_extracts_detailszBRefurbishedWatcherTests.test_parse_embedded_tiles_extracts_details   s_    (()>@S@STX>X''++X>L!**I6 ?r   c                    t        j                  t        t         j                        }| j	                  |D cg c]  }|j
                   c}g d       | j	                  |d   j                  d       | j	                  |d   j                  d       | j	                  |d   j                  d       | j	                  |d   j                  d       y c c}w )	N)zG2AAA/AzG2BBB/AzG3AAA/AzG3BBB/Ar   96GB   128GB   64GB   )r   r   HIGH_MEMORY_LISTING_HTMLr   r   r   ramr   s      r   5test_parse_embedded_tiles_matches_high_memory_targetszMRefurbishedWatcherTests.test_parse_embedded_tiles_matches_high_memory_targets   s    (()A7CVCVWX>X''++X>@lm!&1!'2!&1!&1	 ?s   Cc                     t        j                  t        t         j                        }| j	                  |D cg c]  }|j
                   c}g d       y c c}w )N)zG4EEE/AzG4AAA/AzG4BBB/A)r   r   MAC_MINI_CRITERIA_HTMLr   r   r   )r   r   ps      r   >test_mac_mini_matches_24gb_or_better_with_512gb_or_1tb_storagezVRefurbishedWatcherTests.test_mac_mini_matches_24gb_or_better_with_512gb_or_1tb_storage   sB    (()?ATATU2A!%%24UV2s   Ac                     d}| j                  t        j                  |      d       | j                  t        j                  |      d       y )NzEConfigurable specs include 24GB unified memory and 512GB SSD storage.24GB512GB)r   r   extract_ramextract_storage)r   texts     r   test_extract_detailsz,RefurbishedWatcherTests.test_extract_details   s=    V,,T2F;006@    c           
      l   t        j                         5 }t        |      dz  }t        t        j
                  t        |      ddddd      }t        j                  t        dt              5  t        j                  t        d	      5 }t	        j                  |      }d d d        d d d        | j                  g        j                          t        j                  |j                               }| j                  |d
   dg       d d d        y # 1 sw Y   uxY w# 1 sw Y   yxY w# 1 sw Y   y xY w)N
state.jsonr   Fhttps://ntfy.shrefurbishedMacurl
state_filetimeoutnotify_on_first_rundry_runntfy_servertopic
fetch_textreturn_valuenotify_ntfy	seen_keysr	   )tempfileTemporaryDirectoryr   r   r   r   strr   objectr   
check_oncer   assert_not_calledjsonloads	read_text)r   tmpdirr8   argsnotifynew_productsstates          r   .test_first_run_baselines_without_notificationszFRefurbishedWatcherTests.test_first_run_baselines_without_notifications   s    ((*ff4J''z?$)-&D g|,OQVQ]Q]^egtQuy&11$7 RvO \2.$$&JJz3356EU;/';% +* RvQuOO +*s=   AD*-DDD&A#D*DDD'	#D**D3c           
      \   t        j                         5 }t        |      dz  }|j                  t	        j
                  ddgi             t        t        j                  t        |      ddddd      }t        j                  t        d	t        
      5  t        j                  t        ddd      5  t        j                  t        d      5 }t        j                  |      }d d d        d d d        d d d        | j                  D cg c]  }|j                   c}dg       j!                          t	        j"                  |j%                               }| j                  |d   dg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY wc c}w # 1 sw Y   y xY w)Nr3   rB   G16K3LLr   Fr4   r5   r6   r>   r?   enrich_productc                     | S )N )r   r9   s     r   <lambda>zXRefurbishedWatcherTests.test_new_product_after_previous_check_notifies.<locals>.<lambda>   s    _fr1   )side_effectrA   r	   )r   )rC   rD   r   
write_textrI   dumpsr   r   r   rE   r   rF   r   rG   r   r   assert_called_oncerJ   rK   )r   rL   r8   rM   rN   rO   r   rP   s           r   .test_new_product_after_previous_check_notifieszFRefurbishedWatcherTests.test_new_product_after_previous_check_notifies   sN   ((*ff4J!!$**kI;-G"HI''z?$)-&D WlNW&6DfgWm4&11$7 5 h O FggkkF	R%%'JJz3356EU;/';/ +*  54 hg ON G) +*sa   A?F"F3FE9	$F,F4F"F
AF"9F>FF
FF	F""F+N)
__name__
__module____qualname__r   r   r%   r)   r0   rQ   r\   rV   r1   r   r   r   |   s'    772WA<*<r1   r   __main__)builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arrI   rC   unittestargparser   pathlibr   unittest.mockr   refurbished_watcherr   r   r   r'   r#   TestCaser   r]   mainrV   r1   r   <module>rn      sn            %" * @( VQ<h// Q<h zHMMO r1   