Blame view

src/test/java/org/legrog/web/publisher/PublisherVersionViewTest.java 16.3 KB
1 2
package org.legrog.web.publisher;

3 4
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
5
import org.junit.jupiter.api.BeforeEach;
6
import org.junit.jupiter.api.DisplayName;
7 8
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.platform.runner.JUnitPlatform;
9 10 11 12
import org.junit.runner.RunWith;
import org.legrog.entities.Country;
import org.legrog.entities.Publisher;
import org.legrog.entities.PublisherVersion;
13
import org.legrog.test.MockitoExtension;
14
import org.legrog.web.xyz.SharedService;
15
import org.mockito.*;
16 17 18
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

19 20
import java.util.List;

21
import static org.assertj.core.api.Assertions.assertThat;
22
import static org.junit.jupiter.api.Assertions.assertThrows;
23 24
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
25 26 27 28 29
import static org.mockito.Mockito.when;

/**
 * Classe testant PublisherVersionView.
 */
30 31
@RunWith(JUnitPlatform.class)
@ExtendWith(MockitoExtension.class)
32
@DisplayName("Creates new versions of a publisher, and shows existing with history of actions on it")
33 34 35 36 37 38
public class PublisherVersionViewTest {
    Logger logger = LoggerFactory.getLogger(getClass());

    private PublisherVersionView publisherVersionView;

    private PublisherVersion publisherVersion;
39 40
    private PublisherService publisherService;
    private SharedService sharedService;
41

42 43
    @Mock
    PublisherVersion publisherVersionMock;
44 45

    @BeforeEach
46
    public void setUp(@Mock PublisherService publisherService, @Mock SharedService sharedService) throws Exception {
47 48
        this.publisherService = publisherService;
        this.sharedService = sharedService;
49
        publisherVersionView = new PublisherVersionView(publisherService, sharedService);
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
        publisherVersionView.setEditMode(false);
        publisherVersionView.setNewPublisher(false);

        publisherVersion = new PublisherVersion();
        publisherVersion.setPublisherName("A");
        publisherVersion.setPublisherStreetAddress("B");
        publisherVersion.setPublisherPostalCode("C");
        publisherVersion.setPublisherPostOfficeBoxNumber("D");
        publisherVersion.setPublisherAddressRegion("E");
        publisherVersion.setPublisherAddressLocality("F");
        publisherVersion.setPublisherAddressCountry(new Country());
        publisherVersion.setPublisherTelephone("G");
        publisherVersion.setPublisherEmail("H");
        publisherVersion.setPublisherURL("I");
        publisherVersion.setPublisherHistory("J");
        publisherVersion.setPublisher(new Publisher());

67
        when(publisherService.getPublisherVersion(1)).thenReturn(publisherVersion);
68 69 70

    }

71
    @Test
72
    @DisplayName("when constructed, should have right dependencies : Shared Service and Publisher Service")
73 74
    public void testDependencies() {
        assertThat(publisherVersionView).isNotNull();
75 76
        assertThat(publisherVersionView.publisherService).isEqualTo(publisherService);
        assertThat(publisherVersionView.sharedService).isEqualTo(sharedService);
77 78
    }

79
    @DisplayName("when edit is clicked, should switch to edit mode")
80 81 82 83 84 85 86
    @Test
    public void testEdit() {
        assertThat(publisherVersionView.isEditMode()).isFalse();
        publisherVersionView.edit();
        assertThat(publisherVersionView.isEditMode()).isTrue();
    }

87
    @DisplayName("when cancel is clicked for an new publisher, should clean new form data and switch to non-edit mode")
88 89 90 91 92 93 94
    @Test
    public void testCancelNewPublisher() {
        publisherVersionView.setNewPublisher(true);

        publisherVersionView.cancel();

        assertThat(publisherVersionView.getPublisherName()).isNull();
95 96 97 98 99 100 101 102
        assertThat(publisherVersionView.getStreetAddress()).isNull();
        assertThat(publisherVersionView.getPostalCode()).isNull();
        assertThat(publisherVersionView.getPostOfficeBoxNumber()).isNull();
        assertThat(publisherVersionView.getAddressRegion()).isNull();
        assertThat(publisherVersionView.getAddressLocality()).isNull();
        assertThat(publisherVersionView.getTelephone()).isNull();
        assertThat(publisherVersionView.getEmail()).isNull();
        assertThat(publisherVersionView.getuRL()).isNull();
103 104 105 106
        assertThat(publisherVersionView.getPublisherHistory()).isNull();
        assertThat(publisherVersionView.isEditMode()).isTrue();
    }

107
    @DisplayName("whan cancel is clicked for a publisher update, should revert to original data and switch to non-edit mode")
108 109
    @Test
    public void testCancelNewVersionOfPublisher() {
110
        publisherVersionView.setNewPublisher(false);
111
        publisherVersionView.setStringId("1");
112 113

        publisherVersionView.setPublisherName("1");
114 115 116 117 118
        publisherVersionView.setStreetAddress("2");
        publisherVersionView.setPostalCode("3");
        publisherVersionView.setPostOfficeBoxNumber("4");
        publisherVersionView.setAddressRegion("5");
        publisherVersionView.setAddressLocality("6");
119
        publisherVersionView.setPublisherAddressCountry(new Country());
120 121 122
        publisherVersionView.setTelephone("7");
        publisherVersionView.setEmail("8");
        publisherVersionView.setuRL("9");
123 124 125 126 127
        publisherVersionView.setPublisherHistory("10");

        publisherVersionView.cancel();

        assertThat(publisherVersionView.getPublisherName()).isEqualTo("A");
128 129 130 131 132 133 134 135
        assertThat(publisherVersionView.getStreetAddress()).isEqualTo("B");
        assertThat(publisherVersionView.getPostalCode()).isEqualTo("C");
        assertThat(publisherVersionView.getPostOfficeBoxNumber()).isEqualTo("D");
        assertThat(publisherVersionView.getAddressRegion()).isEqualTo("E");
        assertThat(publisherVersionView.getAddressLocality()).isEqualTo("F");
        assertThat(publisherVersionView.getTelephone()).isEqualTo("G");
        assertThat(publisherVersionView.getEmail()).isEqualTo("H");
        assertThat(publisherVersionView.getuRL()).isEqualTo("I");
136 137 138 139
        assertThat(publisherVersionView.getPublisherHistory()).isEqualTo("J");
        assertThat(publisherVersionView.isEditMode()).isFalse();

    }
140

141
    @Nested
142
    @DisplayName("init method")
143
    class LoadDataTests{
144 145 146 147

        @Test
        @DisplayName("Loads all actions on it")
        public void testLoadActions(@Mock PublisherService publisherService) {
148 149
            publisherVersionView.setStringId("1");
            publisherVersionView.init();
150 151 152 153
            Mockito.verify(publisherService).getAllPublisherVersionActions(publisherVersion);
        }

        @Test
154
        @DisplayName("when called for existing publisher, should get the rigtht data into the form")
155 156
        public void testLoadData() {
            publisherVersionView.setNewPublisher(true);
157 158
            publisherVersionView.setStringId("1");
            publisherVersionView.init();
159
            assertThat(publisherVersionView.getPublisherName()).isEqualTo("A");
160 161 162 163 164 165 166 167
            assertThat(publisherVersionView.getStreetAddress()).isEqualTo("B");
            assertThat(publisherVersionView.getPostalCode()).isEqualTo("C");
            assertThat(publisherVersionView.getPostOfficeBoxNumber()).isEqualTo("D");
            assertThat(publisherVersionView.getAddressRegion()).isEqualTo("E");
            assertThat(publisherVersionView.getAddressLocality()).isEqualTo("F");
            assertThat(publisherVersionView.getTelephone()).isEqualTo("G");
            assertThat(publisherVersionView.getEmail()).isEqualTo("H");
            assertThat(publisherVersionView.getuRL()).isEqualTo("I");
168 169 170 171 172
            assertThat(publisherVersionView.getPublisherHistory()).isEqualTo("J");
            assertThat(publisherVersionView.isNewPublisher()).isFalse();
        }

        @Test
173
        @DisplayName("when called for new publisher, should set form for new version")
174 175
        public void testLoadDataEmpty() {
            publisherVersionView.setNewPublisher(false);
176 177
            publisherVersionView.setStringId("0");
            publisherVersionView.init();
178 179 180
            assertThat(publisherVersionView.isNewPublisher()).isTrue();
            assertThat(publisherVersionView.isEditMode()).isTrue();
        }
181 182 183 184

    }

    @Nested
185
    @DisplayName("getImmutableValues method")
186
    class GetImmutableValuesTests{
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
        @BeforeEach
        @DisplayName("given a way to get a null")
        public void given(@Mock PublisherService publisherService) {
            when(publisherService.addNewPublisher(any())).thenReturn(publisherVersionMock);
            when(publisherVersionMock.getPublisherVersionId()).thenReturn(2);
            when(publisherService.getPublisherVersion(2)).thenReturn(null);
        }
        @Test
        @DisplayName("throws an IllegalStateException")
        public void testUnexcpetedNull() {
            assertThrows(IllegalStateException.class, () -> publisherVersionView.add());
        }
    }

    @Nested
202
    @DisplayName("save method")
203
    class SaveTests{
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
        PublisherVersionView publisherVersionViewForSave;
        public boolean addCalled = false;
        public boolean updateCalled = false;

        @BeforeEach
        public void given() {
            publisherVersionViewForSave = new PublisherVersionView() {

                @Override
                public void add() {
                    addCalled = true;
                }

                @Override
                public void update() {
                    updateCalled = true;
                }

            };
        }

        @Test
226
        @DisplayName("when view is for a new publisher, should delegate to add() method")
227 228 229 230 231 232 233
        public void testSaveAdd() {
            publisherVersionViewForSave.setNewPublisher(true);
            publisherVersionViewForSave.save();
            assertThat(addCalled).isTrue();
        }

        @Test
234
        @DisplayName("when view is not for a new publisher, should delegate to update() method")
235 236 237 238 239 240 241 242 243
        public void testSaveUpdate() {
            publisherVersionViewForSave.setNewPublisher(false);
            publisherVersionViewForSave.save();
            assertThat(updateCalled).isTrue();
        }

    }

    @Nested
244
    @DisplayName("post construct method")
245
    class Init {
246 247 248 249 250 251 252 253 254

        private List<Country> countries;

        @BeforeEach
        public void setUp(@Mock SharedService sharedService) {
            when(sharedService.getAllCountries()).thenReturn(countries);
        }

        @Test
255
        @DisplayName("should set lists of available masks, account roles, and account properties from shared service")
256 257 258 259 260
        public void testList(@Mock SharedService sharedService) {
            publisherVersionView.init();
            assertThat(publisherVersionView.getAvailableCountries()).isEqualTo(countries);
        }
    }
261

262 263
    @Nested
    @DisplayName("Update method")
264
    class UpdateTests {
265 266 267 268 269 270

        @BeforeEach
        public void given(@Mock Publisher publisherMock) {
            publisherVersionView.setNewPublisher(false);

            publisherVersionView.setPublisherName("1");
271 272 273 274 275
            publisherVersionView.setStreetAddress("2");
            publisherVersionView.setPostalCode("3");
            publisherVersionView.setPostOfficeBoxNumber("4");
            publisherVersionView.setAddressRegion("5");
            publisherVersionView.setAddressLocality("6");
276
            publisherVersionView.setPublisherAddressCountry(new Country());
277 278 279
            publisherVersionView.setTelephone("7");
            publisherVersionView.setEmail("8");
            publisherVersionView.setuRL("9");
280 281 282 283 284 285
            publisherVersionView.setPublisherHistory("10");
            publisherVersionView.setPublisher(publisherMock);
        }

        @Nested
        @DisplayName("given some input fields")
286
        class Given {
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305

            @Captor
            ArgumentCaptor<PublisherVersion> publisherVersionArgumentCaptor;

            @Captor
            ArgumentCaptor<Publisher> publisherArgumentCaptor;

            @BeforeEach
            public void test(@Mock PublisherService publisherService, @Mock Publisher publisherMock, @Mock PublisherVersion publisherVersionMock) {
                // mock de l'appel dans Immutables values
                when(publisherService.getPublisherVersion(anyInt())).thenReturn(new PublisherVersion());

                when(publisherService.addVersionToPublisher(any(Publisher.class), any(PublisherVersion.class))).thenReturn(publisherVersionMock);
                when(publisherVersionMock.getPublisher()).thenReturn(publisherMock);
                when(publisherVersionMock.getPublisherVersionId()).thenReturn(13);

                publisherVersionView.update();
            }

306
            @DisplayName("should add a new version to a publisher")
307 308 309
            @Test
            public void shouldAddNewVersion(@Mock PublisherService publisherService) {
                Mockito.verify(publisherService).addVersionToPublisher(publisherArgumentCaptor.capture(), publisherVersionArgumentCaptor.capture());
310 311
                PublisherVersion capturedPublisherVersion = publisherVersionArgumentCaptor.getValue();
                assertThat(capturedPublisherVersion.getPublisherName()).isEqualTo("1");
312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331
            }

            @DisplayName("should put state in non edit mode")
            @Test
            public void shouldNonEdit() {
                assertThat(publisherVersionView.isEditMode()).isFalse();
            }

            @DisplayName("should put state in non new publisher with new ids")
            @Test
            public void shouldNonNewPublisher(@Mock Publisher publisherMock) {

                assertThat(publisherVersionView.isNewPublisher()).isFalse();
                assertThat(publisherVersionView.getPublisher()).isEqualTo(publisherMock);
                assertThat(publisherVersionView.getPublisherVersionId()).isEqualTo(13);
            }

        }

    }
332 333 334

    @Nested
    @DisplayName("Add method")
335
    class AddTests {
336 337 338 339 340 341

        @BeforeEach
        public void given(@Mock Publisher publisherMock) {
            publisherVersionView.setNewPublisher(true);

            publisherVersionView.setPublisherName("A");
342 343 344 345 346
            publisherVersionView.setStreetAddress("B");
            publisherVersionView.setPostalCode("C");
            publisherVersionView.setPostOfficeBoxNumber("D");
            publisherVersionView.setAddressRegion("E");
            publisherVersionView.setAddressLocality("F");
347
            publisherVersionView.setPublisherAddressCountry(new Country());
348 349 350
            publisherVersionView.setTelephone("G");
            publisherVersionView.setEmail("H");
            publisherVersionView.setuRL("I");
351 352 353 354 355 356
            publisherVersionView.setPublisherHistory("J");
            publisherVersionView.setPublisher(publisherMock);
        }

        @Nested
        @DisplayName("given some input fields")
357
        class Given {
358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373

            @Captor
            ArgumentCaptor<PublisherVersion> publisherVersionArgumentCaptor;

            @BeforeEach
            public void test(@Mock PublisherService publisherService, @Mock Publisher publisherMock, @Mock PublisherVersion publisherVersionMock) {
                // mock de l'appel dans Immutables values
                when(publisherService.getPublisherVersion(anyInt())).thenReturn(new PublisherVersion());


                when(publisherService.addNewPublisher(any(PublisherVersion.class))).thenReturn(publisherVersionMock);
                when(publisherVersionMock.getPublisher()).thenReturn(publisherMock);
                when(publisherVersionMock.getPublisherVersionId()).thenReturn(42);
                publisherVersionView.add();
            }

374
            @DisplayName("should create a new publisher in the application with its first version")
375 376 377
            @Test
            public void shouldSave(@Mock PublisherService publisherService) {
                Mockito.verify(publisherService).addNewPublisher(publisherVersionArgumentCaptor.capture());
378 379
                PublisherVersion capturedPublisherVersion = publisherVersionArgumentCaptor.getValue();
                assertThat(capturedPublisherVersion.getPublisherName()).isEqualTo("A");
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402
            }


            @DisplayName("should put state in non edit mode")
            @Test
            public void shouldNonEdit() {
                assertThat(publisherVersionView.isEditMode()).isFalse();
            }

            @DisplayName("should put state in non new publisher with new ids")
            @Test
            public void shouldNonNewPublisher(@Mock Publisher publisherMock) {

                assertThat(publisherVersionView.isNewPublisher()).isFalse();
                assertThat(publisherVersionView.getPublisher()).isEqualTo(publisherMock);
                assertThat(publisherVersionView.getPublisherVersionId()).isEqualTo(42);
            }

        }

    }

}