def test_color_length_optimizer_does_nothing_when_color_does_not_exist(self):
    original_data = requests_bodies.build_request_body(
        properties_to_be_removed=['color'])

    optimizer = color_length_optimizer.ColorLengthOptimizer()

    _, optimization_result = optimizer.process(original_data)

    self.assertEqual(0, optimization_result.num_of_products_optimized)
  def test_color_optimizer_does_not_remove_color_with_exactly_forty_chars(self):
    color_with_exactly_forty_chars = 'BlackBlackBlackBlackBlackBlackBlackBlack'
    original_data = requests_bodies.build_request_body(
        properties_to_be_updated={'color': color_with_exactly_forty_chars})

    optimizer = color_length_optimizer.ColorLengthOptimizer()

    optimized_data, optimization_result = optimizer.process(original_data)
    product = optimized_data['entries'][0]['product']

    self.assertEqual(color_with_exactly_forty_chars, product['color'])
    self.assertEqual(0, optimization_result.num_of_products_optimized)
    def test_color_length_optimizer_does_nothing_when_color_valid_multiple_values(
            self):
        original_color = 'Blue/White/Red'
        original_data = requests_bodies.build_request_body(
            properties_to_be_updated={'color': original_color})

        optimizer = color_length_optimizer.ColorLengthOptimizer()

        optimized_data, optimization_result = optimizer.process(original_data)
        product = optimized_data['entries'][0]['product']

        self.assertEqual(original_color, product['color'])
        self.assertEqual(0, optimization_result.num_of_products_optimized)
    def test_color_length_optimizer_removes_colors_until_only_three_colors_remain(
            self):
        color_with_five_values = 'Blue/White/Red/Black/Orange'
        original_data = requests_bodies.build_request_body(
            properties_to_be_updated={'color': color_with_five_values})

        optimizer = color_length_optimizer.ColorLengthOptimizer()

        optimized_data, optimization_result = optimizer.process(original_data)
        product = optimized_data['entries'][0]['product']

        self.assertEqual('Blue/White/Red', product['color'])
        self.assertEqual(1, optimization_result.num_of_products_optimized)
  def test_color_length_optimizer_removes_colors_longer_than_forty_chars(self):
    color_with_value_longer_than_forty_chars = 'BlackBlackBlackBlackBlackBlackBlackBlackBlack/Blue'
    original_data = requests_bodies.build_request_body(
        properties_to_be_updated={
            'color': color_with_value_longer_than_forty_chars
        })

    optimizer = color_length_optimizer.ColorLengthOptimizer()

    optimized_data, optimization_result = optimizer.process(original_data)
    product = optimized_data['entries'][0]['product']

    self.assertEqual('Blue', product['color'])
    self.assertEqual(1, optimization_result.num_of_products_optimized)
    def test_color_length_optimizer_removes_colors_until_length_is_less_than_100(
            self):
        color_with_three_len_thirty_five_colors = (
            'BlackBlackBlackBlackBlackBlackBlack'
            '/WhiteWhiteWhiteWhiteWhiteWhiteWhite'
            '/GreenGreenGreenGreenGreenGreenGreen')
        original_data = requests_bodies.build_request_body(
            properties_to_be_updated={
                'color': color_with_three_len_thirty_five_colors
            })

        optimizer = color_length_optimizer.ColorLengthOptimizer()

        optimized_data, optimization_result = optimizer.process(original_data)
        product = optimized_data['entries'][0]['product']

        self.assertEqual(
            'BlackBlackBlackBlackBlackBlackBlack'
            '/WhiteWhiteWhiteWhiteWhiteWhiteWhite', product['color'])
        self.assertEqual(1, optimization_result.num_of_products_optimized)