/*
 * Copyright 2020, TeamDev. All rights reserved.
 *
 * Redistribution and use in source and/or binary forms, with or without
 * modification, must retain the above copyright notice and the following
 * disclaimer.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package io.spine.server.storage.datastore;

import io.spine.base.Tests;
import io.spine.server.ServerEnvironment;
import io.spine.server.delivery.CatchUpTest;
import io.spine.testing.SlowTest;
import io.spine.testing.server.storage.datastore.TestDatastoreStorageFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

/**
 * Smoke tests on {@link io.spine.server.delivery.CatchUp CatchUp} functionality.
 *
 * <p>The tests are extremely slow, so several long tests from {@link CatchUpTest} are disabled.
 */
@DisplayName("Datastore-backed `CatchUp` should ")
@SlowTest
class DsCatchUpSmokeTest extends CatchUpTest {

    private TestDatastoreStorageFactory factory;

    @Override
    @BeforeEach
    public void setUp() {
        factory = TestDatastoreStorageFactory.local();
        ServerEnvironment.when(Tests.class)
                         .use(factory);
    }

    @Override
    @AfterEach
    public void tearDown() {
        if (factory != null) {
            factory.tearDown();
        }
    }

    @Test
    @Disabled
    @Override
    public void withNanosByIds() throws InterruptedException {
        super.withNanosByIds();
    }

    @Test
    @Disabled
    @Override
    public void withMillisByIds() throws InterruptedException {
        super.withMillisByIds();
    }

    @Test
    @Disabled
    @Override
    public void withMillisAllInOrder() throws InterruptedException {
        super.withMillisAllInOrder();
    }
}

@@ -1665,16 +1665,26 @@
 ed.%0A */%0A
+@SlowTest%0A
 @Display
@@ -1726,26 +1726,16 @@
 ould %22)%0A
-@SlowTest%0A
 class Ds
@@ -1824,30 +1824,16 @@
 ctory;%0A%0A
-    @Override%0A
     @Bef
@@ -1848,25 +1848,34 @@
     
-public void setUp
+void prepareStorageFactory
 () %7B
@@ -2021,30 +2021,16 @@
 %0A    %7D%0A%0A
-    @Override%0A
     @Aft
@@ -2036,31 +2036,24 @@
 terEach%0A    
-public 
 void tearDow
@@ -2053,16 +2053,30 @@
 tearDown
+StorageFactory
 () %7B%0A   

Improve setup method naming.