Skip to content

Commit

Permalink
Merge pull request #42 from sectsect/feature/add-test-for-multi-condi…
Browse files Browse the repository at this point in the history
…tions

test: add unit test
  • Loading branch information
sectsect committed Apr 29, 2024
2 parents 692da10 + a6ade14 commit 1f7bab1
Showing 1 changed file with 92 additions and 31 deletions.
123 changes: 92 additions & 31 deletions tests/GoogleSpreadsheetToDBQueryTests.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,13 @@ public function setUp(): void {
// Mock response from Google Sheets API.
$this->mock_data = array(
array(
'id' => 1,
'date' => '2023-06-01 10:00:00',
'worksheet_id' => 'sheet1',
'worksheet_name' => 'Sheet 1',
'sheet_name' => 'Data 1',
'title' => 'Title 1',
'value' => '{"key1":"value1"}',
),
array(
'id' => 2,
'date' => '2023-06-02 11:00:00',
'worksheet_id' => 'sheet1',
'worksheet_name' => 'Sheet 1',
'sheet_name' => 'Data 2',
'title' => 'Title 2',
'value' => '{"key2":"value2"}',
'id' => 4,
'date' => '2023-06-04 13:00:00',
'worksheet_id' => 'sheet2',
'worksheet_name' => 'Sheet 2',
'sheet_name' => 'Data 4',
'title' => 'Title 4',
'value' => '{"key4":"value4"}',
),
array(
'id' => 3,
Expand All @@ -40,13 +31,22 @@ public function setUp(): void {
'value' => '{"key3":"value3"}',
),
array(
'id' => 4,
'date' => '2023-06-04 13:00:00',
'worksheet_id' => 'sheet2',
'worksheet_name' => 'Sheet 2',
'sheet_name' => 'Data 4',
'title' => 'Title 4',
'value' => '{"key4":"value4"}',
'id' => 2,
'date' => '2023-06-02 11:00:00',
'worksheet_id' => 'sheet1',
'worksheet_name' => 'Sheet 1',
'sheet_name' => 'Data 2',
'title' => 'Title 2',
'value' => '{"key2":"value2"}',
),
array(
'id' => 1,
'date' => '2023-06-01 10:00:00',
'worksheet_id' => 'sheet1',
'worksheet_name' => 'Sheet 1',
'sheet_name' => 'Data 1',
'title' => 'Title 1',
'value' => '{"key1":"value1"}',
),
);
}
Expand Down Expand Up @@ -88,7 +88,8 @@ public function test_get_3_rows_from_4th_ascending_by_id() {

$rows = $sheet->getrow();
$this->assertCount( 1, $rows );
$this->assertEquals( 4, $rows[0]['id'] );
$first = reset( $rows );
$this->assertEquals( 1, $first['id'] );
}

/**
Expand Down Expand Up @@ -147,17 +148,30 @@ public function test_get_3_rows_with_specific_worksheet_ordered_by_id() {

$sheet->expects( $this->once() )
->method( 'getrow' )
->willReturn(
array_filter(
$this->mock_data,
function ( $row ) {
return $row['worksheet_name'] == 'Sheet 1';
}
)
->willReturnCallback(
function () {
$filtered = array_filter(
$this->mock_data,
function ( $row ) {
return $row['worksheet_name'] == 'Sheet 1';
}
);
usort(
$filtered,
function ( $a, $b ) {
return $a['id'] <=> $b['id'];
}
);
return $filtered;
}
);

$rows = $sheet->getrow();
$this->assertCount( 2, $rows );

// Convert an associative array into an indexed array forcibly.
$rows = array_values( $rows );

$this->assertEquals( 1, $rows[0]['id'] );
$this->assertEquals( 2, $rows[1]['id'] );
}
Expand Down Expand Up @@ -229,4 +243,51 @@ function ( $row ) {
$first = reset( $rows );
$this->assertEquals( 'Title 4', $first['title'] );
}

/**
* Test getting the 2nd row with a date greater than or equal to '2023-06-03 12:00:00' and a specific worksheet name, ordered by ID in descending order.
*/
public function test_get_2nd_row_with_date_gte_and_specific_worksheet_ordered_by_id_desc() {
$args = array(
'orderby' => 'id',
'order' => 'DESC',
'limit' => 1,
'offset' => 1,
'where' => array(
array(
'key' => 'date',
'value' => '2023-06-03 12:00:00',
'compare' => '>=',
),
array(
'key' => 'worksheet_name',
'value' => 'Sheet 2',
),
),
);
$sheet = $this->getMockBuilder( Google_Spreadsheet_To_DB_Query::class )
->setConstructorArgs( array( $args ) )
->setMethods( array( 'getrow' ) )
->getMock();

$sheet->expects( $this->once() )
->method( 'getrow' )
->willReturn(
array_slice(
array_filter(
$this->mock_data,
function ( $row ) {
return $row['date'] >= '2023-06-03 12:00:00' && $row['worksheet_name'] == 'Sheet 2';
}
),
1,
1
)
);

$rows = $sheet->getrow();
$this->assertCount( 1, $rows );
$first = reset( $rows );
$this->assertEquals( 3, $first['id'] );
}
}

0 comments on commit 1f7bab1

Please sign in to comment.