/*
 * Copyright (c) 2015-present, Parse, LLC.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */
package com.parse;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.robolectric.Shadows.shadowOf;

import android.webkit.MimeTypeMap;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;

// For android.webkit.MimeTypeMap
@RunWith(RobolectricTestRunner.class)
public class ParseFileStateTest {

    @Before
    public void setUp() {
        shadowOf(MimeTypeMap.getSingleton()).addExtensionMimeTypMapping("txt", "text/plain");
    }

    @After
    public void tearDown() {
        shadowOf(MimeTypeMap.getSingleton()).clearMappings();
    }

    @Test
    public void testDefaults() {
        ParseFile.State state = new ParseFile.State.Builder().build();
        assertEquals("file", state.name());
        assertNull(state.mimeType());
        assertNull(state.url());
    }

    @Test
    public void testProperties() {
        ParseFile.State state =
                new ParseFile.State.Builder()
                        .name("test")
                        .mimeType("application/test")
                        .url("http://twitter.com/grantland")
                        .build();
        assertEquals("test", state.name());
        assertEquals("application/test", state.mimeType());
        assertEquals("http://twitter.com/grantland", state.url());
    }

    @Test
    public void testCopy() {
        ParseFile.State state =
                new ParseFile.State.Builder()
                        .name("test")
                        .mimeType("application/test")
                        .url("http://twitter.com/grantland")
                        .build();
        ParseFile.State copy = new ParseFile.State.Builder(state).build();
        assertEquals("test", copy.name());
        assertEquals("application/test", copy.mimeType());
        assertEquals("http://twitter.com/grantland", copy.url());
        assertNotSame(state, copy);
    }

    @Test
    public void testMimeType() {
        ParseFile.State state = new ParseFile.State.Builder().mimeType("test").build();
        assertEquals("test", state.mimeType());
    }

    @Test
    public void testMimeTypeNotSetFromExtension() {
        ParseFile.State state = new ParseFile.State.Builder().name("test.txt").build();
        assertNull(state.mimeType());
    }
}
