Package com.saasovation.collaboration.domain.model.forum

Source Code of com.saasovation.collaboration.domain.model.forum.DiscussionTest

//   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.collaboration.domain.model.forum;

import com.saasovation.collaboration.domain.model.DomainRegistry;
import com.saasovation.collaboration.domain.model.collaborator.Author;
import com.saasovation.collaboration.domain.model.tenant.Tenant;
import com.saasovation.common.domain.model.DomainEventPublisher;
import com.saasovation.common.domain.model.DomainEventSubscriber;

public class DiscussionTest extends AbstractForumTest {

    private String bodyText;
    private Discussion discussion;
    private DiscussionId discussionId;
    private Forum forum;
    private ForumId forumId;
    private Post post;
    private Post postAgain;
    private PostId postId;
    private String subject;
    private Tenant tenant;

    public DiscussionTest() {
        super();
    }

    public void testPostToDiscussion() throws Exception {

        forum = this.forumAggregate();

        DomainRegistry.forumRepository().save(forum);

        DomainEventPublisher
            .instance()
            .subscribe(new DomainEventSubscriber<DiscussionStarted>() {
                public void handleEvent(DiscussionStarted aDomainEvent) {
                    discussionId = aDomainEvent.discussionId();
                }
                public Class<DiscussionStarted> subscribedToEventType() {
                    return DiscussionStarted.class;
                }
            });

        discussion = forum.startDiscussion(
                DomainRegistry.forumIdentityService(),
                new Author("jdoe", "John Doe", "jdoe@saasovation.com"),
                "All About DDD");

        DomainRegistry.discussionRepository().save(discussion);

        assertNotNull(discussion);
        assertNotNull(discussionId);

        post = discussion.post(
                DomainRegistry.forumIdentityService(),
                new Author("jdoe", "John Doe", "jdoe@saasovation.com"),
                "All About DDD",
                "I'd like to start a discussion all about doing domain-driven design.");

        DomainRegistry.postRepository().save(post);

        assertNotNull(post);
        assertEquals("jdoe", post.author().identity());
        assertEquals("All About DDD", post.subject());

        expectedEvents(3);
        expectedEvent(ForumStarted.class);
        expectedEvent(DiscussionStarted.class);
        expectedEvent(PostedToDiscussion.class);
    }

    public void testMultiplePostsToDiscussion() throws Exception {

        forum = this.forumAggregate();

        DomainRegistry.forumRepository().save(forum);

        DomainEventPublisher
            .instance()
            .subscribe(new DomainEventSubscriber<DiscussionStarted>() {
                public void handleEvent(DiscussionStarted aDomainEvent) {
                    discussionId = aDomainEvent.discussionId();
                }
                public Class<DiscussionStarted> subscribedToEventType() {
                    return DiscussionStarted.class;
                }
            });

        discussion = forum.startDiscussion(
                DomainRegistry.forumIdentityService(),
                new Author("jdoe", "John Doe", "jdoe@saasovation.com"),
                "All About DDD");

        DomainRegistry.discussionRepository().save(discussion);

        DomainEventPublisher
            .instance()
            .subscribe(new DomainEventSubscriber<PostedToDiscussion>() {
            public void handleEvent(PostedToDiscussion aDomainEvent) {
                tenant = aDomainEvent.tenant();
                forumId = aDomainEvent.forumId();
                discussionId = aDomainEvent.discussionId();
                postId = aDomainEvent.postId();
                subject = aDomainEvent.subject();
                bodyText = aDomainEvent.bodyText();
            }
            public Class<PostedToDiscussion> subscribedToEventType() {
                return PostedToDiscussion.class;
            }
        });

        post = discussion.post(
                DomainRegistry.forumIdentityService(),
                new Author("jdoe", "John Doe", "jdoe@saasovation.com"),
                "All About DDD",
                "I'd like to start a discussion all about doing domain-driven design.");

        postAgain = discussion.post(
                DomainRegistry.forumIdentityService(),
                new Author("bobw", "Bob Williams", "bobw@saasovation.com"),
                "RE: All About DDD",
                "Well, I think it's a great idea!");

        DomainRegistry.postRepository().save(post);
        DomainRegistry.postRepository().save(postAgain);

        assertNotNull(tenant);
        assertEquals(forum.tenant(), tenant);
        assertNotNull(forumId);
        assertEquals(forum.forumId(), forumId);
        assertNotNull(discussionId);
        assertEquals(discussion.discussionId(), discussionId);
        assertNotNull(subject);
        assertNotNull(bodyText);

        assertNotNull(postId);
        assertTrue(postAgain.subject().equals("RE: All About DDD"));
        assertTrue(postAgain.author().identity().equals("bobw"));

        expectedEvents(4);
        expectedEvent(ForumStarted.class);
        expectedEvent(DiscussionStarted.class);
        expectedEvent(PostedToDiscussion.class, 2);
    }
}
TOP

Related Classes of com.saasovation.collaboration.domain.model.forum.DiscussionTest

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.