Package com.saasovation.agilepm.domain.model.product

Source Code of com.saasovation.agilepm.domain.model.product.ProductTest

//   Copyright 2012,2013 Vaughn Vernon
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package com.saasovation.agilepm.domain.model.product;

import java.util.Date;

import com.saasovation.agilepm.domain.model.discussion.DiscussionAvailability;
import com.saasovation.agilepm.domain.model.discussion.DiscussionDescriptor;
import com.saasovation.agilepm.domain.model.product.backlogitem.BacklogItem;
import com.saasovation.agilepm.domain.model.product.backlogitem.BacklogItemId;
import com.saasovation.agilepm.domain.model.product.backlogitem.BacklogItemType;
import com.saasovation.agilepm.domain.model.product.backlogitem.StoryPoints;
import com.saasovation.agilepm.domain.model.product.release.Release;
import com.saasovation.agilepm.domain.model.product.release.ReleaseId;
import com.saasovation.agilepm.domain.model.product.sprint.Sprint;
import com.saasovation.agilepm.domain.model.product.sprint.SprintId;
import com.saasovation.agilepm.domain.model.team.ProductOwnerId;
import com.saasovation.agilepm.domain.model.tenant.TenantId;
import com.saasovation.common.domain.model.process.ProcessId;

public class ProductTest extends ProductCommonTest {

    public ProductTest() {
        super();
    }

    public void testCreate() throws Exception {
        TenantId tenantId = new TenantId("T12345");

        Product product =
                new Product(
                        tenantId,
                        new ProductId("P12345"),
                        new ProductOwnerId(tenantId, "zdoe"),
                        "My Product",
                        "This is the description of my product.",
                        DiscussionAvailability.NOT_REQUESTED);

        this.productRepository.save(product);

        assertNotNull(product);
        assertEquals("My Product", product.name());
        assertEquals("This is the description of my product.", product.description());
        assertEquals(DiscussionAvailability.NOT_REQUESTED, product.discussion().availability());
        assertNull(product.discussionInitiationId());

        expectedEvents(1);
        expectedEvent(ProductCreated.class);
    }

    public void testPlanBacklogItem() throws Exception {
        Product product = this.productForTest();

        BacklogItem backlogItem =
                product.planBacklogItem(
                        new BacklogItemId("B12345"),
                        "Support threaded discussions for Scrum products and backlog items.",
                        "Domain Model",
                        BacklogItemType.FEATURE,
                        StoryPoints.EIGHT);

        assertNotNull(backlogItem);

        expectedEvents(2);
        expectedEvent(ProductCreated.class);
        expectedEvent(ProductBacklogItemPlanned.class);
    }

    public void testPlannedBacklogItem() throws Exception {
        Product product = this.productForTest();

        BacklogItem backlogItem1 = this.backlogItem1ForTest(product);
        BacklogItem backlogItem2 = this.backlogItem2ForTest(product);
        BacklogItem backlogItem3 = this.backlogItem3ForTest(product);

        expectedEvents(4);
        expectedEvent(ProductCreated.class, 1);
        expectedEvent(ProductBacklogItemPlanned.class, 3);

        product.plannedProductBacklogItem(backlogItem1);
        product.plannedProductBacklogItem(backlogItem2);
        product.plannedProductBacklogItem(backlogItem3);

        for (ProductBacklogItem productBacklogItem : product.allBacklogItems()) {
            if (productBacklogItem.ordering() == 1) {
                assertTrue(productBacklogItem.backlogItemId().id().endsWith("-1"));
            }
            if (productBacklogItem.ordering() == 2) {
                assertTrue(productBacklogItem.backlogItemId().id().endsWith("-2"));
            }
            if (productBacklogItem.ordering() == 3) {
                assertTrue(productBacklogItem.backlogItemId().id().endsWith("-3"));
            }
        }
    }

    public void testReorderFrom() throws Exception {
        Product product = this.productForTest();

        BacklogItem backlogItem1 = this.backlogItem1ForTest(product);
        BacklogItem backlogItem2 = this.backlogItem2ForTest(product);
        BacklogItem backlogItem3 = this.backlogItem3ForTest(product);

        expectedEvents(4);
        expectedEvent(ProductCreated.class, 1);
        expectedEvent(ProductBacklogItemPlanned.class, 3);

        product.plannedProductBacklogItem(backlogItem1);
        product.plannedProductBacklogItem(backlogItem2);
        product.plannedProductBacklogItem(backlogItem3);

        ProductBacklogItem productBacklogItem1 = null;
        ProductBacklogItem productBacklogItem2 = null;
        ProductBacklogItem productBacklogItem3 = null;

        for (ProductBacklogItem productBacklogItem : product.allBacklogItems()) {
            if (productBacklogItem.ordering() == 1) {
                productBacklogItem1 = productBacklogItem;
            }
            if (productBacklogItem.ordering() == 2) {
                productBacklogItem2 = productBacklogItem;
            }
            if (productBacklogItem.ordering() == 3) {
                productBacklogItem3 = productBacklogItem;
            }
        }

        product.reorderFrom(backlogItem3.backlogItemId(), 1);

        assertEquals(1, productBacklogItem3.ordering());
        assertEquals(2, productBacklogItem1.ordering());
        assertEquals(3, productBacklogItem2.ordering());
    }

    public void testRequestAndInitiateDiscussion() throws Exception {
        Product product = this.productForTest();

        product.requestDiscussion(DiscussionAvailability.REQUESTED);

        assertTrue(product.discussion().descriptor().isUndefined());
        assertEquals(DiscussionAvailability.REQUESTED, product.discussion().availability());

        expectedEvents(2);
        expectedEvent(ProductCreated.class);
        expectedEvent(ProductDiscussionRequested.class);

        // eventually...
        ProcessId processId = ProcessId.newProcessId();
        product.startDiscussionInitiation(processId.id());

        // eventually...
        product.initiateDiscussion(new DiscussionDescriptor("CollabDiscussion12345"));

        expectedEvents(3);
        expectedEvent(ProductDiscussionInitiated.class);

        assertEquals(processId.id(), product.discussionInitiationId());
        assertFalse(product.discussion().descriptor().isUndefined());
        assertEquals(DiscussionAvailability.READY, product.discussion().availability());
    }

    public void testRequestAndFailedDiscussion() throws Exception {
        Product product = this.productForTest();

        product.requestDiscussion(DiscussionAvailability.REQUESTED);

        assertTrue(product.discussion().descriptor().isUndefined());
        assertEquals(DiscussionAvailability.REQUESTED, product.discussion().availability());

        expectedEvents(2);
        expectedEvent(ProductCreated.class);
        expectedEvent(ProductDiscussionRequested.class);

        // eventually...
        ProcessId processId = ProcessId.newProcessId();
        product.startDiscussionInitiation(processId.id());

        // eventually...
        product.failDiscussionInitiation();

        expectedEvents(2);

        assertNull(product.discussionInitiationId());
        assertTrue(product.discussion().descriptor().isUndefined());
        assertEquals(DiscussionAvailability.FAILED, product.discussion().availability());
    }

    public void testScheduleRelease() throws Exception {
        Product product = this.productForTest();

        Date begins = new Date();
        Date ends = new Date(begins.getTime() + (86400000L * 30L));

        Release release =
                product.scheduleRelease(
                        new ReleaseId("R-12345"),
                        "Release 1.3",
                        "Enterprise interactive release.",
                        begins,
                        ends);

        assertNotNull(release);
        assertEquals("Release 1.3", release.name());
        assertEquals("Enterprise interactive release.", release.description());

        expectedEvents(2);
        expectedEvent(ProductCreated.class);
        expectedEvent(ProductReleaseScheduled.class);
    }

    public void testScheduleSprint() throws Exception {
        Product product = this.productForTest();

        Date begins = new Date();
        Date ends = new Date(begins.getTime() + (86400000L * 30L));

        Sprint sprint =
                product.scheduleSprint(
                        new SprintId("S12345"),
                        "Collaboration Integration Sprint",
                        "Make Scrum project collaboration possible.",
                        begins,
                        ends);

        assertNotNull(sprint);
        assertEquals("Collaboration Integration Sprint", sprint.name());
        assertEquals("Make Scrum project collaboration possible.", sprint.goals());

        expectedEvents(2);
        expectedEvent(ProductCreated.class);
        expectedEvent(ProductSprintScheduled.class);
    }
}
TOP

Related Classes of com.saasovation.agilepm.domain.model.product.ProductTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.