package net.azib.ipscan.config;

import net.azib.ipscan.fetchers.Fetcher;
import org.eclipse.swt.graphics.Point;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.prefs.Preferences;

import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

/**
 * DimensionsConfigTest
 * 
 * @author Anton Keks
 */
public class GUIConfigTest {

	private Preferences preferences;
	private GUIConfig config;

	@Before
	public void setUp() throws Exception {
		preferences = Preferences.userRoot().node("ipscan-test");
		preferences.clear();
		config = new GUIConfig(preferences);
	}

	@After
	public void tearDown() throws Exception {
		preferences.removeNode();
	}

	@Test
	public void setMainWindowDimensions() throws Exception {
		var size1 = new Point(2, 1);
		config.setMainWindowSize(size1, false);
		assertFalse(config.isMainWindowMaximized);
		assertEquals(size1, config.getMainWindowSize());

		var size2 = new Point(3, 4);
		config.setMainWindowSize(size2, true);
		assertTrue(config.isMainWindowMaximized);
		assertEquals(size1, config.getMainWindowSize());
	}

	@Test
	public void store() throws Exception {
		config.setMainWindowSize(new Point(33, 44), false);
		config.store();
		assertEquals(33, preferences.getInt("windowWidth", 0));

		config.setMainWindowSize(new Point(55, 66), true);
		config.store();
		assertEquals(33, preferences.getInt("windowWidth", 0));
	}

	@Test
	public void columnWidths() throws Exception {
		var fetcher = mock(Fetcher.class);
		when(fetcher.getId()).thenReturn("fetcher.abc");

		config.setColumnWidth(fetcher, 35);
		assertEquals(35, config.getColumnWidth(fetcher));
		assertEquals(35, preferences.getInt("columnWidth." + fetcher.getId(), 0));
	}
}
