Skip to content

Commit 85760c8

Browse files
authored
Merge pull request #374 from lutovich/1.1-tx-isOpen
Fix `Transaction#isOpen()`
2 parents e953d34 + 682c8d0 commit 85760c8

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed

driver/src/main/java/org/neo4j/driver/internal/ExplicitTransaction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public synchronized StatementResult run( Statement statement )
205205
@Override
206206
public boolean isOpen()
207207
{
208-
return state == State.ACTIVE;
208+
return state != State.SUCCEEDED && state != State.ROLLED_BACK;
209209
}
210210

211211
private void ensureNotFailed()

driver/src/test/java/org/neo4j/driver/internal/ExplicitTransactionTest.java

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@
2626

2727
import org.neo4j.driver.internal.spi.Collector;
2828
import org.neo4j.driver.internal.spi.Connection;
29+
import org.neo4j.driver.v1.Transaction;
2930
import org.neo4j.driver.v1.Value;
3031

32+
import static org.junit.Assert.assertFalse;
33+
import static org.junit.Assert.assertTrue;
3134
import static org.mockito.Matchers.any;
3235
import static org.mockito.Mockito.inOrder;
3336
import static org.mockito.Mockito.mock;
@@ -143,4 +146,71 @@ public void shouldSyncWhenBookmarkGiven()
143146
inOrder.verify( connection ).pullAll( Collector.NO_OP );
144147
inOrder.verify( connection ).sync();
145148
}
149+
150+
@Test
151+
public void shouldBeOpenAfterConstruction()
152+
{
153+
Transaction tx = new ExplicitTransaction( openConnectionMock(), mock( Runnable.class ) );
154+
155+
assertTrue( tx.isOpen() );
156+
}
157+
158+
@Test
159+
public void shouldBeOpenWhenMarkedForSuccess()
160+
{
161+
Transaction tx = new ExplicitTransaction( openConnectionMock(), mock( Runnable.class ) );
162+
163+
tx.success();
164+
165+
assertTrue( tx.isOpen() );
166+
}
167+
168+
@Test
169+
public void shouldBeOpenWhenMarkedForFailure()
170+
{
171+
Transaction tx = new ExplicitTransaction( openConnectionMock(), mock( Runnable.class ) );
172+
173+
tx.failure();
174+
175+
assertTrue( tx.isOpen() );
176+
}
177+
178+
@Test
179+
public void shouldBeOpenWhenMarkedToClose()
180+
{
181+
ExplicitTransaction tx = new ExplicitTransaction( openConnectionMock(), mock( Runnable.class ) );
182+
183+
tx.markToClose();
184+
185+
assertTrue( tx.isOpen() );
186+
}
187+
188+
@Test
189+
public void shouldBeClosedAfterCommit()
190+
{
191+
Transaction tx = new ExplicitTransaction( openConnectionMock(), mock( Runnable.class ) );
192+
193+
tx.success();
194+
tx.close();
195+
196+
assertFalse( tx.isOpen() );
197+
}
198+
199+
@Test
200+
public void shouldBeClosedAfterRollback()
201+
{
202+
Transaction tx = new ExplicitTransaction( openConnectionMock(), mock( Runnable.class ) );
203+
204+
tx.failure();
205+
tx.close();
206+
207+
assertFalse( tx.isOpen() );
208+
}
209+
210+
private static Connection openConnectionMock()
211+
{
212+
Connection connection = mock( Connection.class );
213+
when( connection.isOpen() ).thenReturn( true );
214+
return connection;
215+
}
146216
}

0 commit comments

Comments
 (0)