def test_save_place(self): place = ParsedPlace(None) place.parsed_data = { 'id': '123', 'coordinates': { 'latitude': '60.0', 'longitude': '30.0', }, 'title': 'Корчма', 'type': 'кабак', 'gallery': ['/pic'], 'address': 'Ленинград', 'url': 'www.leningrad.spb.ru', 'tags': ['18+'], 'metros': ['Маяковская'], 'working_hours': [], 'phones': [ {'type': 'cell', 'number': '12345'}, {'type': 'home', 'number': '43544'}, ], } place.save(self.parser_info) Place.objects.get( id__contains='123', type__text='кабак', lat='60.0', lon='30.0', phones__number='12345', metros__name='Маяковская', gallery__url='/pic', )
def test_parse_place(self): string = ''' <place id="23530" type="other"> <city>Санкт-Петербург</city> <title>Нептун</title> <address>ул. Марата, д.86</address> <phones> <phone type="other">+7 812 448-00-77</phone> </phones> <tags> <tag>арт-центры</tag> <tag>6+</tag> <tag>зоопарки</tag> <tag>места для свиданий</tag> </tags> <metros> <metro>Пушкинская</metro> </metros> <gallery> <image href="http://test.kudago.com/media/images/place/b5/5e/b55e6d2f71e153ed094c60d549c8ad62.jpg"/> <image href="http://test.kudago.com/media/images/place/4b/dd/4bdd3a84d3fb269390614415434b039f.jpg"/> <image href="http://test.kudago.com/media/images/place/bc/6a/bc6a346545eb7de713117d2cd9a56e86.jpg"/> <image href="http://test.kudago.com/media/images/place/bc/2a/bc2a78d0abd990ef7bb76d0c087af43d.jpg"/> </gallery> <text><![CDATA[<p>"Одна из особых достопримечательностей океанариума - стеклянный туннель, проходящий сквозь главный аквариум с акулами. Сложно передать ощущение, когда исполинская рыбина внезапно проплывет над головой, и ты на краткий миг веришь, что оказался посреди океана.</p> <p>Кроме обычной экспозиции в океанариуме ежедневно (кроме понедельников) проходят представления: тюленье шоу и шоу с акулами. Представление с участием акул показывает, что эти хладнокровные хищники не только поддаются дрессировке, но даже могут испытывать радость от общения с человеком. Шоу начинается в 19.00.</p> <p>Выступления тюленей проводятся в 11.30 и 16.00. Морские обитатели – настоящие актеры, которые не только знают массу трюков, но и обладают собственной неповторимой индивидуальностью.</p> <p>Стоимость билета в океанариум зависит от времени посещения. По будням обычный билет обойдется в 450-550 рублей, цена для школьников и студентов – 250-350. Билет для детей от 5 до 7 лет стоит 100 рублей. Дети до 4 лет могут пройти бесплатно. По выходным и праздникам цены на билеты растут. С полным перечнем цен можно ознакомиться на официальном сайте океанариума.</p> <p><a class="external-link" href="https://vk.com/aquarium_spb" rel="nofollow" target="_blank" title="""">https://vk.com/aquarium_spb</a>"</p> ]]></text> <url>http://www.kudago.com</url> </place> ''' elt = etree.fromstring(string) place = ParsedPlace(elt) place.parse() parsed = place.parsed_data self.assertEqual(parsed['id'], '23530') self.assertEqual(parsed['type'], 'other') self.assertEqual(parsed['city'], 'Санкт-Петербург') self.assertEqual(parsed['address'], 'ул. Марата, д.86') self.assertEqual(len(parsed['phones']), 1) phone = parsed['phones'][0] self.assertEqual(phone['type'], 'other') self.assertEqual(phone['number'], '78124480077') self.assertListEqual( sorted(parsed['tags']), sorted(['арт-центры', '6+', 'места для свиданий', 'зоопарки',]) ) self.assertEqual(parsed['metros'], ['Пушкинская']) self.assertIn('http://test.kudago.com/media/images/place/bc/6a/bc6a346545eb7de713117d2cd9a56e86.jpg', parsed['gallery']) self.assertIn('Одна из особых достопримечательностей', parsed['text']) self.assertEqual(parsed['url'], 'http://www.kudago.com')