@@ -1501,3 +1501,89 @@ def test_cell_styles_none_when_not_set(self):
15011501 assert "fill" not in cell
15021502 assert "width" not in cell
15031503 assert "height" not in cell
1504+
1505+ def test_omit_fixed_value_fields (self ):
1506+ """固定値フィールドが省略されること"""
1507+ excel_bytes = self ._create_test_excel ()
1508+ self .mock_download_client .download_file .return_value = excel_bytes
1509+
1510+ parser = SharePointExcelParser (self .mock_download_client )
1511+ result_json = parser .parse_to_json ("/test/file.xlsx" )
1512+
1513+ result = json .loads (result_json )
1514+
1515+ # トップレベルの固定値フィールドは省略
1516+ assert "response_kind" not in result
1517+ assert "data_included" not in result
1518+
1519+ # シートレベルの固定値フィールドは省略
1520+ sheet = result ["sheets" ][0 ]
1521+ assert "purpose" not in sheet
1522+ assert "data_included" not in sheet
1523+
1524+ def test_omit_null_fields (self ):
1525+ """nullフィールドが省略されること"""
1526+ excel_bytes = self ._create_test_excel ()
1527+ self .mock_download_client .download_file .return_value = excel_bytes
1528+
1529+ parser = SharePointExcelParser (self .mock_download_client )
1530+ # sheet_name/cell_rangeを指定しない
1531+ result_json = parser .parse_to_json ("/test/file.xlsx" )
1532+
1533+ result = json .loads (result_json )
1534+
1535+ # nullフィールドは省略
1536+ assert "requested_sheet" not in result
1537+ assert "requested_range" not in result
1538+
1539+ def test_include_non_null_fields (self ):
1540+ """null以外のフィールドが含まれること"""
1541+ excel_bytes = self ._create_multi_sheet_excel ()
1542+ self .mock_download_client .download_file .return_value = excel_bytes
1543+
1544+ parser = SharePointExcelParser (self .mock_download_client )
1545+ # sheet_name/cell_rangeを指定
1546+ result_json = parser .parse_to_json (
1547+ "/test/file.xlsx" , sheet_name = "Sheet1" , cell_range = "A1:B2"
1548+ )
1549+
1550+ result = json .loads (result_json )
1551+
1552+ # 値があるフィールドは含まれる
1553+ assert result ["requested_sheet" ] == "Sheet1"
1554+ assert result ["requested_range" ] == "A1:B2"
1555+
1556+ def test_omit_null_dimensions (self ):
1557+ """dimensions=nullが省略されること"""
1558+ parser = SharePointExcelParser (self .mock_download_client )
1559+
1560+ # モックを使用してsheet.dimensionsをNoneに設定
1561+ with patch ("src.sharepoint_excel.load_workbook" ) as mock_load :
1562+ mock_wb = Mock ()
1563+ mock_sheet = Mock ()
1564+ mock_sheet .title = "EmptySheet"
1565+ mock_sheet .dimensions = None # dimensionsをNoneに設定
1566+ mock_sheet .freeze_panes = None # freeze_panesもNone
1567+ # sheet_viewを設定して_get_frozen_panes()での警告ログを防ぐ
1568+ mock_sheet .sheet_view = Mock (pane = None )
1569+ # merged_cellsはranges属性を持つオブジェクト
1570+ mock_merged_cells = Mock ()
1571+ mock_merged_cells .ranges = []
1572+ mock_sheet .merged_cells = mock_merged_cells
1573+ mock_sheet .iter_rows = Mock (return_value = []) # 行なし
1574+ mock_sheet .max_row = 0
1575+ mock_sheet .max_column = 0
1576+ mock_wb .sheetnames = ["EmptySheet" ]
1577+ mock_wb .__getitem__ = Mock (return_value = mock_sheet )
1578+ mock_wb .close = Mock ()
1579+ mock_load .return_value = mock_wb
1580+
1581+ # load_workbookがモックされているため、download_fileの戻り値は実際には使われない
1582+ self .mock_download_client .download_file .return_value = b""
1583+ result_json = parser .parse_to_json ("/test/empty.xlsx" )
1584+
1585+ result = json .loads (result_json )
1586+ sheet = result ["sheets" ][0 ]
1587+
1588+ # dimensionsがNoneの場合は省略
1589+ assert "dimensions" not in sheet
0 commit comments