LoadIsolationTest.java

/*******************************************************************************
 * Copyright (c) 2024 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/
package org.eclipse.rdf4j.console.command;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.contains;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.io.File;

import org.eclipse.rdf4j.common.transaction.IsolationLevels;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;

public class LoadIsolationTest extends AbstractCommandTest {

	@Mock
	private Repository mockRepository;

	@Mock
	private RepositoryConnection mockConnection;

	private Load cmd;

	@BeforeEach
	public void setUp() throws Exception {
		cmd = new Load(mockConsoleIO, mockConsoleState, defaultSettings);

		when(mockConsoleState.getRepository()).thenReturn(mockRepository);
		when(mockRepository.getConnection()).thenReturn(mockConnection);
		doNothing().when(mockConnection).add(any(File.class), isNull(), isNull(), any());
	}

	@Test
	public void promptBeforeUsingDefaultIsolation() throws Exception {
		when(mockConsoleIO.askProceed(contains("isolation level NONE"), eq(false))).thenReturn(false);

		cmd.execute("load", "data.ttl");

		verify(mockConsoleIO).askProceed(contains("isolation level NONE"), eq(false));
		verify(mockConnection, never()).add(any(File.class), isNull(), isNull(), any());
	}

	@Test
	public void allowsIsolationArgumentWithoutPrompt() throws Exception {
		cmd.execute("load", "data.ttl", "isolation", IsolationLevels.SNAPSHOT.name());

		verify(mockConsoleIO, never()).askProceed(anyString(), eq(false));
		verify(mockConnection).begin(IsolationLevels.SNAPSHOT);
	}
}