Skip to content

Commit dc62bcb

Browse files
noahsilasnbbeeken
andauthored
fix(NODE-4186): accept ReadPreferenceLike in TransactionOptions type (#3425)
Co-authored-by: Neal Beeken <[email protected]>
1 parent 82b4a23 commit dc62bcb

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

src/transactions.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { Document } from './bson';
22
import { MongoRuntimeError, MongoTransactionError } from './error';
33
import type { CommandOperationOptions } from './operations/command';
44
import { ReadConcern, ReadConcernLike } from './read_concern';
5+
import type { ReadPreferenceLike } from './read_preference';
56
import { ReadPreference } from './read_preference';
67
import type { Server } from './sdam/server';
78
import { WriteConcern } from './write_concern';
@@ -67,7 +68,7 @@ export interface TransactionOptions extends CommandOperationOptions {
6768
/** A default writeConcern for commands in this transaction */
6869
writeConcern?: WriteConcern;
6970
/** A default read preference for commands in this transaction */
70-
readPreference?: ReadPreference;
71+
readPreference?: ReadPreferenceLike;
7172
/** Specifies the maximum amount of time to allow a commit action on a transaction to run in milliseconds */
7273
maxCommitTimeMS?: number;
7374
}

test/types/community/transaction.test-d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ async function runTransactionWithRetry(
4848

4949
async function updateEmployeeInfo(client: MongoClient, session: ClientSession) {
5050
session.startTransaction({
51+
readPreference: 'primary',
5152
readConcern: new ReadConcern('available'), // NODE-3297
5253
writeConcern: { w: 'majority' }
5354
});

test/unit/transactions.test.ts

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { expect } from 'chai';
2+
3+
import { ReadPreference } from '../../src';
4+
import { Transaction } from '../../src/transactions';
5+
6+
describe('class Transaction', () => {
7+
describe('constructor()', () => {
8+
it('uses ReadPreference instance', () => {
9+
const transaction = new Transaction({
10+
readPreference: ReadPreference.nearest
11+
});
12+
expect(transaction.options)
13+
.to.have.property('readPreference')
14+
.that.is.instanceOf(ReadPreference)
15+
.that.has.property('mode', 'nearest');
16+
});
17+
18+
it('transforms ReadPreferenceLike string', () => {
19+
const transaction = new Transaction({
20+
readPreference: 'nearest'
21+
});
22+
expect(transaction.options)
23+
.to.have.property('readPreference')
24+
.that.is.instanceOf(ReadPreference)
25+
.that.has.property('mode', 'nearest');
26+
});
27+
});
28+
});

0 commit comments

Comments
 (0)