package com.codahale.dropwizard.validation;

import org.junit.Before;
import org.junit.Test;

import javax.validation.Validation;
import javax.validation.Validator;

import java.util.Locale;

import static org.fest.assertions.api.Assertions.assertThat;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assume.assumeThat;

public class PortRangeValidatorTest {
    @SuppressWarnings("PublicField")
    public static class Example {
        @PortRange
        public int port = 8080;

        @PortRange(min = 10000, max = 15000)
        public int otherPort = 10001;
    }


    private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    private final Example example = new Example();

    @Before
    public void setUp() throws Exception {
        assumeThat(Locale.getDefault().getLanguage(), is("en"));
    }

    @Test
    public void acceptsNonPrivilegedPorts() throws Exception {
        example.port = 2048;

        assertThat(validator.validate(example))
                .isEmpty();
    }

    @Test
    public void acceptsDynamicPorts() throws Exception {
        example.port = 0;

        assertThat(validator.validate(example))
                .isEmpty();
    }

    @Test
    public void rejectsNegativePorts() throws Exception {
        example.port = -1;

        assertThat(ConstraintViolations.format(validator.validate(example)))
                .containsOnly("port must be between 1025 and 65535 (was -1)");
    }

    @Test
    public void rejectsPrivilegedPorts() throws Exception {
        example.port = 80;

        assertThat(ConstraintViolations.format(validator.validate(example)))
                .containsOnly("port must be between 1025 and 65535 (was 80)");
    }

    @Test
    public void allowsForCustomMinimumPorts() throws Exception {
        example.otherPort = 8080;

        assertThat(ConstraintViolations.format(validator.validate(example)))
                .containsOnly("otherPort must be between 10000 and 15000 (was 8080)");
    }

    @Test
    public void allowsForCustomMaximumPorts() throws Exception {
        example.otherPort = 16000;

        assertThat(ConstraintViolations.format(validator.validate(example)))
                .containsOnly("otherPort must be between 10000 and 15000 (was 16000)");
    }
}

@@ -1444,35 +1444,32 @@
 ust be between 1
-025
  and 65535 (was 
@@ -1486,269 +1486,8 @@
  %7D%0A%0A
-    @Test%0A    public void rejectsPrivilegedPorts() throws Exception %7B%0A        example.port = 80;%0A%0A        assertThat(ConstraintViolations.format(validator.validate(example)))%0A                .containsOnly(%22port must be between 1025 and 65535 (was 80)%22);%0A    %7D%0A%0A
     

Fix tests.