/*
 * Copyright 2016 Cisco Systems, Inc.
 *
 * 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.cisco.gerrit.plugins.slack;

import com.google.gerrit.server.events.ChangeMergedEvent;
import com.google.gerrit.server.events.PatchSetCreatedEvent;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;

public class PublishEventListenerTest
{
    private PatchSetCreatedEvent mockPatchSetCreatedEvent =
            mock(PatchSetCreatedEvent.class);
    private ChangeMergedEvent mocChangeMergedEvent =
            mock(ChangeMergedEvent.class);

    private PublishEventListener publishEventListener;

    @Before
    public void setup() throws Exception
    {
        publishEventListener = new PublishEventListener();
    }

    @Test
    public void handlesPatchSetCreatedEvents() throws Exception
    {
        // Wat? Placeholder, as I need to think about out how to test...
        assertTrue(true);
    }
}
