def test_modify_offer_saves_an_update_activity(self, app):
        # Given
        offer_dict = {'name': 'bar', 'type': 'foo'}
        offer = Offer(**offer_dict)
        ApiHandler.save(offer)
        modify_dict = {'name': 'bor'}
        offer.modify(modify_dict)

        # When
        ApiHandler.save(offer)

        # Then
        all_activities = Activity.query.all()
        offer_activities = offer.__activities__
        update_offer_activity = offer_activities[1]
        assert len(all_activities) == 2
        assert len(offer_activities) == 2
        assert update_offer_activity.entityIdentifier == offer.activityIdentifier
        assert update_offer_activity.verb == 'update'
        assert {
            **offer_dict,
            **modify_dict
        }.items() <= update_offer_activity.datum.items()
        assert modify_dict.items() == update_offer_activity.patch.items()
        assert offer_dict.items() <= update_offer_activity.oldDatum.items()
Exemplo n.º 2
0
    def test_for_valid_relationship_dicts_with_nested_modifications(self, app):
        # Given
        offer_dict = {'name': 'foo', 'type': 'bar'}
        offer = Offer(**offer_dict)
        ApiHandler.save(offer)
        stock_dict1 = {'offerId': humanize(offer.id), 'price': 1}
        stock1 = Stock(**stock_dict1)
        ApiHandler.save(stock1)
        stock_dict1['id'] = humanize(stock1.id)
        stock_dict2 = {'offerId': humanize(offer.id), 'price': 2}
        stock2 = Stock(**stock_dict2)
        ApiHandler.save(stock2)
        stock_dict2['id'] = humanize(stock2.id)
        stock_dict2['price'] = 3
        offer_dict['stocks'] = [stock_dict1, stock_dict2]
        offer.modify(offer_dict)

        # When
        ApiHandler.save(offer)

        # Then
        assert offer.name == offer_dict['name']
        offer_stock1 = [s for s in offer.stocks if s.id == stock1.id][0]
        offer_stock2 = [s for s in offer.stocks if s.id == stock2.id][0]
        assert offer_stock1.id == stock1.id
        assert offer_stock1.price == stock_dict1['price']
        assert offer_stock2.id == stock2.id
        assert offer_stock2.price == stock_dict2['price']
    def test_404_with_wrong_base_id(self, app):
        # Given
        offer1 = Offer(name='foo', type='bar')
        offer1.id = 6
        ApiHandler.save(offer1)

        # When
        with pytest.raises(NotFound):
            load_or_404(Offer, 'AZ')
Exemplo n.º 4
0
    def test_find_or_create_returns_existing_offer(self, app):
        # Given
        offer1 = Offer(name='foo', type='bar')
        ApiHandler.save(offer1)

        # When
        offer2 = Offer.find_or_create({'__SEARCH_BY__': 'name', 'name': 'foo'})

        # Then
        assert offer2.id == offer1.id
        assert offer2.name == offer1.name == 'foo'
        assert offer2.type == offer1.type == 'bar'
Exemplo n.º 5
0
    def test_create_or_modify_with_primary_filter(self, app):
        # Given
        datum = {'name': 'foo', 'type': 'bar'}
        offer1 = Offer(**datum)
        ApiHandler.save(offer1)

        # When
        offer2 = Offer.create_or_modify({'id': offer1.humanizedId, **datum})

        # Then
        assert offer2.id == offer1.id
        assert offer2.name == datum['name']
Exemplo n.º 6
0
def create_offer_api(shop_id):
    try:
        offer_hash = get_offer_json_attr_from_hash(request.json)
        if Offer.is_valid_hash_for_create(offer_hash):
            offer_hash['shop'] = Shop.find_by_id(shop_id)
            offer = Offer.create_offer(offer_hash)
            return dumps(offer.as_json()), 200
    except ValueError as e:
        return dumps(e.message), 400
    except Exception as e:
        print(e.message)
        print(traceback.print_exc())
        return dumps(e.message), 400
Exemplo n.º 7
0
    def test_dictify_with_relationships_includes(self, app):
        # given
        offer = Offer()
        stock = Stock()
        offer.stocks = [stock]

        # when
        stock_dict = as_dict(stock)
        offer_dict = as_dict(offer, includes=["stocks"])

        # then
        assert 'stocks' in offer_dict
        assert len(offer_dict['stocks']) == 1
        assert offer_dict['stocks'][0]['id'] == stock_dict['id']
Exemplo n.º 8
0
    def test_find_returns_none(self, app):
        # Given
        offer1 = Offer(name='foo', type='bar')
        ApiHandler.save(offer1)

        # When
        offer2 = Offer.find({
            '__SEARCH_BY__': 'name',
            'name': 'fee',
            'type': 'bric'
        })

        # Then
        assert offer2 is None
    def test_on_datetime_list_returns_string_with_date_in_ISO_8601_list(self):
        # Given
        offer = Offer()
        stock = Stock()
        stock.offer = offer
        stock.beginningDatetime = now
        stock.endDatetime = now + timedelta(hours=3)
        offer.stocks = [stock]

        # When
        serialized_list = serialize(offer.dateRange)

        # Then
        for date in serialized_list:
            self._assert_is_in_ISO_8601_format(date)
Exemplo n.º 10
0
    def test_modify_a_property_with_no_fset(self, app):
        # When
        stock = Stock()
        offer = Offer(name="foo", notDeletedStocks=[stock], type="bar")

        # Then
        assert offer.notDeletedStocks == []
Exemplo n.º 11
0
    def test_create_or_modify_with_relationship_search(self, app):
        # Given
        offer = Offer.create_or_modify(
            {
                '__SEARCH_BY__': 'name',
                'name': 'foo',
                'type': 'bar'
            },
            with_add=True,
            with_flush=True)
        stock1 = Stock.create_or_modify({
            '__SEARCH_BY__': ['offer', 'price'],
            'offer': offer,
            'price': 2
        })

        # When
        stock2 = Stock.create_or_modify({
            '__SEARCH_BY__': ['offer', 'price'],
            'offer': offer,
            'price': 3
        })

        #Then
        assert offer.id != None
        assert offer.name == 'foo'
        assert offer.type == 'bar'
        assert stock1.offer.id == offer.id
        assert stock2.offer.id == offer.id
        assert stock1.id == None
        assert stock2.id == None
Exemplo n.º 12
0
    def test_create_delete_activity_with_previous_updated_activities(
            self, app):
        # Given
        offer = Offer(name='bar', type='foo')
        ApiHandler.save(offer)

        update_activity = Activity(dateCreated=datetime.utcnow(),
                                   entityIdentifier=offer.activityIdentifier,
                                   modelName='Offer',
                                   patch={'name': 'bor'})

        delete_activity = Activity(dateCreated=datetime.utcnow(),
                                   entityIdentifier=offer.activityIdentifier,
                                   modelName='Offer',
                                   verb='delete')

        # When
        ApiHandler.activate(update_activity, delete_activity)

        # Then
        query_filter = (Activity.data['id'].astext.cast(Integer) == offer.id) & \
                       (Activity.verb == 'delete')
        activity = Activity.query.filter(query_filter).one()
        offers = Offer.query.all()
        assert len(offers) == 0
        assert activity.entityIdentifier == offer.activityIdentifier
Exemplo n.º 13
0
    def test_create_or_modify_returns_modified_offer(self, app):
        # Given
        offer1 = Offer(name='foo', type='bar')
        ApiHandler.save(offer1)

        # When
        offer2 = Offer.create_or_modify({
            '__SEARCH_BY__': 'name',
            'name': 'foo',
            'type': 'bric'
        })

        # Then
        assert offer2.id == offer1.id
        assert offer2.name == offer1.name == 'foo'
        assert offer2.type == 'bric'
Exemplo n.º 14
0
    def test_create_or_modify_with_relationships_search(self, app):
        # Given
        offer = Offer.create_or_modify(
            {
                '__SEARCH_BY__': 'name',
                'name': 'foo',
                'type': 'bar'
            },
            with_add=True,
            with_flush=True)
        tag = Tag.create_or_modify({
            '__SEARCH_BY__': 'label',
            'label': 'car'
        },
                                   with_add=True,
                                   with_flush=True)

        # When
        offer_tag = OfferTag.create_or_modify({
            '__SEARCH_BY__': ['offer', 'tag'],
            'offer': offer,
            'tag': tag
        })

        #Then
        assert offer.id != None
        assert offer.name == 'foo'
        assert offer.type == 'bar'
        assert tag.id != None
        assert tag.label == 'car'
        assert offer_tag.id == None
    def test_create_offer_saves_an_insert_activity(self, app):
        # Given
        offer_dict = {'name': 'bar', 'type': 'foo'}
        offer = Offer(**offer_dict)

        # When
        ApiHandler.save(offer)

        # Then
        all_activities = Activity.query.all()
        offer_activities = offer.__activities__
        insert_offer_activity = offer_activities[0]
        insert_offer_activity_from_query = Activity.query \
            .filter_by(entityIdentifier=offer.activityIdentifier) \
            .one()
        assert len(all_activities) == 1
        assert len(offer_activities) == 1
        assert insert_offer_activity_from_query == insert_offer_activity
        assert offer.activityIdentifier == insert_offer_activity.entityIdentifier
        assert insert_offer_activity.entityInsertedAt == offer.dateCreated
        assert insert_offer_activity.oldDatum == None
        assert insert_offer_activity.transaction == None
        assert insert_offer_activity.verb == 'insert'
        assert offer_dict.items() <= insert_offer_activity.patch.items()
        assert offer_dict.items() <= insert_offer_activity.datum.items()
        assert insert_offer_activity.datum['id'] == humanize(offer.id)
        assert insert_offer_activity.patch['id'] == humanize(offer.id)
Exemplo n.º 16
0
    def test_find_and_modify_raises_ressource_not_found_error(self, app):
        # Given
        offer1 = Offer(name='foo', type='bar')
        ApiHandler.save(offer1)

        # When
        with pytest.raises(ResourceNotFoundError) as e:
            Offer.find_and_modify({
                '__SEARCH_BY__': 'name',
                'name': 'fee',
                'type': 'bric'
            })

        # Then
        assert e.value.errors['find_and_modify'] == [
            'No ressource found with {"name": "fee"} '
        ]
Exemplo n.º 17
0
    def test_should_return_soft_deleted_entities_when_option_is_given(self):
        # given
        offer = Offer(name='foo', type='bar')
        stock1 = Stock(price=10, isSoftDeleted=True)
        stock2 = Stock(price=5, isSoftDeleted=False)
        offer.stocks = [stock1, stock2]
        includes = [{
            'key': 'stocks',
            'includes': ['price'],
            'with_soft_deleted_entities': True
        }]

        # when
        offer_dict = as_dict(offer, includes=includes)

        # then
        assert len(offer_dict['stocks']) == 2
Exemplo n.º 18
0
    def test_find_raise_empty_filter_error(self, app):
        # Given
        offer1 = Offer(name='foo', type='bar')
        ApiHandler.save(offer1)

        # When
        with pytest.raises(EmptyFilterError) as errors:
            Offer.find({
                '__SEARCH_BY__': 'position',
                'name': 'fee',
                'type': 'bric'
            })

        # Then
        assert errors.value.errors['_filter_from'] == [
            "None of filters found among: position"
        ]
    def test_404_with_not_existing_id(self, app):
        # Given
        offer1 = Offer(name='foo', type='bar')
        ApiHandler.save(offer1)

        # When
        with pytest.raises(NotFound):
            load_or_404(Offer, humanize(offer1.id + 1))
Exemplo n.º 20
0
    def test_for_valid_relationship_dicts(self):
        # Given
        test_object = Offer()
        stock_dict1 = {'price': 1}
        stock_dict2 = {'price': 1}
        offer_dict = {
            'name': 'foo',
            'stocks': [stock_dict1, stock_dict2],
            'type': 'bar'
        }

        # When
        test_object.modify(offer_dict)

        # Then
        assert test_object.name == offer_dict['name']
        assert test_object.stocks[0].price == stock_dict1['price']
        assert test_object.stocks[1].price == stock_dict2['price']
    def test_get_with_an_index_path_at_entity(self, app):
        # Given
        offer = Offer(name='foo', type='bar')
        stock1 = Stock(offer=offer, price=1)

        # When
        stock2 = stock1.get('offer.stocks.0')

        # Then
        assert stock1.id == stock2.id
Exemplo n.º 22
0
    def test_for_valid_one_to_many_relationship(self, app):
        # Given
        offer = Offer(name='foo', type='bar')
        stock = Stock(offer=offer, price=1)

        # When
        ApiHandler.save(stock)

        # Then
        assert stock.offerId == offer.id
    def test_load_entity(self, app):
        # Given
        offer1 = Offer(name='foo', type='bar')
        ApiHandler.save(offer1)

        # When
        offer2 = load_or_404(Offer, humanize(offer1.id))

        # Then
        assert offer1.id == offer2.id
    def test_get_with_a_string_path(self, app):
        # Given
        offer = Offer(name='foo', type='bar')
        stock = Stock(offer=offer, price=1)

        # When
        offer_name = stock.get('offer.name')

        # Then
        assert offer_name == offer.name
    def test_get_with_an_index_path_at_value(self, app):
        # Given
        offer = Offer(name='foo', type='bar')
        stock = Stock(offer=offer, price=1)

        # When
        stock_price = stock.get('offer.stocks.0.price')

        # Then
        assert stock_price == stock.price
Exemplo n.º 26
0
def list_offer_api(shop_id):
    try:
        shop = Shop.find_by_id(shop_id=shop_id)
        offers = Offer.find_by_shop(shop)
        return dumps([offer.as_json() for offer in offers]), 200
    except ValueError as e:
        return dumps(e.message), 400
    except Exception as e:
        print(e.message)
        print(traceback.print_exc())
        return dumps(e.message), 400
Exemplo n.º 27
0
def get_offer(offer_id):
    try:
        offer = Offer.find_by_id(offer_id)
        if offer:
            return dumps(offer.as_json()), 200
        else:
            return dumps({"Error": "Offer Not found"}), 400
    except Exception as e:
        print(e.message)
        print(traceback.print_exc())
        return dumps(e.message), 400
Exemplo n.º 28
0
def update_offer(offer_id):
    try:
        offer_hash = get_offer_json_attr_from_hash(request.json)
        offer = Offer.find_by_id(offer_id)
        if offer:
            offer = offer.update_offer_details(offer_hash)
            return dumps(offer.as_json()), 200
        else:
            return dumps({"Error": "Offer Not found"}), 400
    except Exception as e:
        print(e.message)
        print(traceback.print_exc())
        return dumps(e.message), 400
Exemplo n.º 29
0
def create_offer(offer_hash=None, fk_shop_id=None, fk_category_id=None):
    if offer_hash is None:
        offer_hash = {
                        'title': 'some Titile',
                        'discount': 50.5,
                        'address': "some address",
                        'description': "wow it came now!!!",
                        'offer_profile_banner_url': "some_url_location",
                        'starting_time': datetime.datetime.now(),
                        'end_time': datetime.datetime.now(),
                        'fk_shop_id': create_shop().shop_id if not fk_shop_id else fk_shop_id,
                        'fk_category_id': create_category().category_id if not fk_category_id else fk_category_id,
                        'geo_location': 'somelocation'
                    }
    return Offer.create_offer(offer_hash)
Exemplo n.º 30
0
    def test_for_valid_relationship(self, app):
        # Given
        offer_dict = {'name': 'foo', 'type': 'bar'}
        offer = Offer(**offer_dict)
        ApiHandler.save(offer)
        stock_dict = {'offer': offer, 'price': 1}
        stock = Stock(**stock_dict)

        # When
        ApiHandler.save(stock)

        # Then
        assert stock.price == stock_dict['price']
        assert stock.offer.id == offer.id
        assert stock.offer.name == offer_dict['name']