Skip to content

Commit a831e5b

Browse files
author
Sergii Solonyna
committed
Enhance testing framework and expand API client capabilities
- Updated `pyproject.toml` to include markers for integration tests and modified test options for better coverage reporting. - Expanded the README.md to clarify the distinction between unit and integration tests, providing detailed usage instructions for both. - Added multiple new request and response types across various categories in the API client, including insights, astrology, and horoscopes. - Introduced new methods in the `AnalysisClient`, `AstrocartographyClient`, and `ChineseClient` for additional analysis and reporting features. - Improved the `AstrologyClient` to include new category clients for enhanced functionality.
1 parent daadb63 commit a831e5b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+9733
-27
lines changed

README.md

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -305,17 +305,38 @@ pre-commit install
305305

306306
### Testing
307307

308+
The project has two test suites: **unit tests** (fast, mocked HTTP) and **integration tests** (real API calls or auto-mocked).
309+
310+
#### Unit Tests
311+
308312
```bash
309-
# Run tests with coverage
310-
pytest --cov=src/astroapi --cov-report=html
313+
# Run all unit tests with coverage (100% branch coverage enforced)
314+
pytest
311315

312-
# Run specific test file
316+
# Run a specific test file
313317
pytest tests/unit/test_client.py
314318

315-
# Run with verbose output
316-
pytest -v
319+
# Run a single test
320+
pytest tests/unit/test_client.py::TestAstrologyClient::test_client_creation_with_config
321+
```
322+
323+
#### Integration Tests
324+
325+
Integration tests verify every SDK endpoint against the real API. If the `ASTROLOGY_API_KEY` environment variable is set, tests call the live API. If not, the HTTP layer is automatically mocked so tests always pass regardless of API access.
326+
327+
```bash
328+
# Mock mode (no API key required, runs in ~0.1s)
329+
pytest tests/integration/ -m integration --no-cov
330+
331+
# Live mode (calls real API, runs in ~6 min)
332+
ASTROLOGY_API_KEY=your_key pytest tests/integration/ -m integration --no-cov
333+
334+
# Run a single integration test file
335+
pytest tests/integration/test_horoscope.py -m integration --no-cov
317336
```
318337

338+
> Tests marked with `@pytest.mark.xfail` are endpoints known to be unavailable or returning unexpected formats in the current API version. In mock mode these show as `xpassed`; in live mode they show as `xfailed`.
339+
319340
### Linting and Formatting
320341

321342
```bash

pyproject.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@ addopts = [
6262
"--cov-report=term-missing",
6363
"--cov-report=html",
6464
"--cov-branch",
65-
"-v"
65+
"-v",
66+
"-m", "not integration",
67+
]
68+
markers = [
69+
"integration: Integration tests calling real API (run with: pytest -m integration)",
6670
]
6771
filterwarnings = [
6872
"error",

src/astroapi/__init__.py

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,89 +14,289 @@
1414
from astroapi.errors import AstrologyError
1515
from astroapi.types import (
1616
AnalysisRequest,
17+
AnnualProfectionRequest,
18+
AstrocartographyMapRequest,
1719
AstrocartographyRequest,
20+
AstrodynesRequest,
1821
AstrologyClientConfig,
1922
BaZiRequest,
23+
BirthAngelsRequest,
2024
BirthData,
25+
BradleyRequest,
2126
BusinessInsightRequest,
27+
BusinessMultipleRequest,
28+
BusinessSingleRequest,
2229
ChartOptions,
30+
ChineseBaziHoroscopeRequest,
31+
ChineseCompatibilityRequest,
32+
ChineseSubject,
33+
CompareAstrodynesRequest,
34+
CompareLocationsRequest,
2335
CompositeAnalysisRequest,
2436
CompositeChartRequest,
37+
CryptoTimingRequest,
2538
DataOptions,
2639
DataRequest,
2740
DateRange,
2841
DateTimeLocation,
2942
DignityRequest,
43+
DirectionReportRequest,
3044
DirectionRequest,
3145
DrawCardsRequest,
46+
EclipseInterpretationRequest,
47+
EclipseNatalCheckRequest,
3248
EclipsesRequest,
3349
FinancialInsightRequest,
3450
FixedStarsConfig,
51+
FlyingStarsChartRequest,
52+
ForexTimingRequest,
53+
GannAnalysisRequest,
54+
GematriaRequest,
55+
HoraryAnalyzeRequest,
56+
HoraryAspectsRequest,
57+
HoraryChartRequest,
58+
HoraryFertilityRequest,
59+
HumanDesignCompatibilityRequest,
60+
HumanDesignOptions,
61+
HumanDesignRequest,
62+
HumanDesignTransitRequest,
63+
LocationAnalysisRequest,
64+
LuckPillarsRequest,
65+
LunarAnalysisRequest,
66+
LunarEventsRequest,
67+
LunarMansionsRequest,
68+
LunarPhasesRequest,
69+
LunarReturnReportRequest,
3570
LunarReturnRequest,
71+
LunarVoidOfCourseRequest,
72+
MarketTimingRequest,
73+
MingGuaRequest,
3674
MoonPhaseRequest,
75+
MultiPetRequest,
76+
MultipleSubjectsRequest,
3777
NatalChartRequest,
78+
NatalTransitReportRequest,
79+
NatalTransitsRequest,
80+
NumerologyCompatibilityRequest,
3881
NumerologyRequest,
82+
PalmAnalysisRequest,
83+
PalmAstroRequest,
84+
PalmCompatibilityRequest,
85+
PalmReadingRequest,
86+
ParanMapRequest,
87+
PdfDailyHoroscopeRequest,
88+
PdfNatalReportRequest,
89+
PdfOptions,
90+
PdfWeeklyHoroscopeRequest,
3991
PersonalizedHoroscopeRequest,
92+
PersonalTextHoroscopeRequest,
4093
PetInsightRequest,
94+
PetPersonalityRequest,
4195
PlanetaryPositionsRequest,
96+
PowerZonesRequest,
97+
ProfectionTimelineRequest,
98+
ProgressionReportRequest,
4299
ProgressionRequest,
43100
RelationshipInsightRequest,
101+
RelocationAnalysisRequest,
102+
RenderCompositeRequest,
103+
RenderNatalRequest,
104+
RenderOptions,
105+
RenderSynastryRequest,
106+
RenderTransitRequest,
44107
ReportOptions,
45108
RetryConfig,
109+
ReturnTransitReportRequest,
110+
SearchLocationsRequest,
111+
SignTextHoroscopeRequest,
46112
SimpleDate,
113+
SingleSubjectRequest,
114+
SolarReturnReportRequest,
47115
SolarReturnRequest,
48116
Subject,
49117
SunSignHoroscopeRequest,
50118
SynastryAnalysisRequest,
51119
SynastryChartRequest,
120+
TarotBirthCardsRequest,
121+
TarotDignitiesRequest,
122+
TarotNatalReportRequest,
123+
TarotOptimalTimesRequest,
124+
TarotQuintessenceRequest,
52125
TarotReadingRequest,
126+
TarotReportRequest,
127+
TarotTimingRequest,
128+
TikkunRequest,
129+
TraditionalAnalysisRequest,
53130
TransitAnalysisRequest,
54131
TransitChartRequest,
132+
TreeOfLifeChartRequest,
133+
VedicCharaDashaRequest,
134+
VedicChartOptions,
135+
VedicChartRequest,
136+
VedicDashaRequest,
137+
VedicDivisionalChartRequest,
138+
VedicFestivalRequest,
139+
VedicKPRequest,
140+
VedicKundliRequest,
141+
VedicOptions,
142+
VedicPanchangRequest,
143+
VedicRegionalPanchangRequest,
144+
VedicRemediesRequest,
145+
VedicRequest,
146+
VedicSadeSatiRequest,
147+
VedicSVGOptions,
148+
VedicTransitRequest,
149+
VedicVarshaphalRequest,
150+
VedicYogaRequest,
151+
VenusReturnReportRequest,
152+
VenusReturnRequest,
55153
WellnessInsightRequest,
154+
YearlyForecastRequest,
155+
ZiweiChartRequest,
56156
)
57157

58158
__all__ = [
59159
"AnalysisRequest",
160+
"AnnualProfectionRequest",
161+
"AstrocartographyMapRequest",
60162
"AstrocartographyRequest",
163+
"AstrodynesRequest",
61164
"AstrologyClient",
62165
"AstrologyClientConfig",
63166
"AstrologyError",
64167
"BaZiRequest",
168+
"BirthAngelsRequest",
65169
"BirthData",
170+
"BradleyRequest",
66171
"BusinessInsightRequest",
172+
"BusinessMultipleRequest",
173+
"BusinessSingleRequest",
67174
"ChartOptions",
175+
"ChineseBaziHoroscopeRequest",
176+
"ChineseCompatibilityRequest",
177+
"ChineseSubject",
178+
"CompareAstrodynesRequest",
179+
"CompareLocationsRequest",
68180
"CompositeAnalysisRequest",
69181
"CompositeChartRequest",
182+
"CryptoTimingRequest",
70183
"DataOptions",
71184
"DataRequest",
72185
"DateRange",
73186
"DateTimeLocation",
74187
"DignityRequest",
188+
"DirectionReportRequest",
75189
"DirectionRequest",
76190
"DrawCardsRequest",
191+
"EclipseInterpretationRequest",
192+
"EclipseNatalCheckRequest",
77193
"EclipsesRequest",
78194
"FinancialInsightRequest",
79195
"FixedStarsConfig",
196+
"FlyingStarsChartRequest",
197+
"ForexTimingRequest",
198+
"GannAnalysisRequest",
199+
"GematriaRequest",
200+
"HoraryAnalyzeRequest",
201+
"HoraryAspectsRequest",
202+
"HoraryChartRequest",
203+
"HoraryFertilityRequest",
204+
"HumanDesignCompatibilityRequest",
205+
"HumanDesignOptions",
206+
"HumanDesignRequest",
207+
"HumanDesignTransitRequest",
208+
"LocationAnalysisRequest",
209+
"LuckPillarsRequest",
210+
"LunarAnalysisRequest",
211+
"LunarEventsRequest",
212+
"LunarMansionsRequest",
213+
"LunarPhasesRequest",
214+
"LunarReturnReportRequest",
80215
"LunarReturnRequest",
216+
"LunarVoidOfCourseRequest",
217+
"MarketTimingRequest",
218+
"MingGuaRequest",
81219
"MoonPhaseRequest",
220+
"MultiPetRequest",
221+
"MultipleSubjectsRequest",
82222
"NatalChartRequest",
223+
"NatalTransitReportRequest",
224+
"NatalTransitsRequest",
225+
"NumerologyCompatibilityRequest",
83226
"NumerologyRequest",
227+
"PalmAnalysisRequest",
228+
"PalmAstroRequest",
229+
"PalmCompatibilityRequest",
230+
"PalmReadingRequest",
231+
"ParanMapRequest",
232+
"PdfDailyHoroscopeRequest",
233+
"PdfNatalReportRequest",
234+
"PdfOptions",
235+
"PdfWeeklyHoroscopeRequest",
236+
"PersonalTextHoroscopeRequest",
84237
"PersonalizedHoroscopeRequest",
85238
"PetInsightRequest",
239+
"PetPersonalityRequest",
86240
"PlanetaryPositionsRequest",
241+
"PowerZonesRequest",
242+
"ProfectionTimelineRequest",
243+
"ProgressionReportRequest",
87244
"ProgressionRequest",
88245
"RelationshipInsightRequest",
246+
"RelocationAnalysisRequest",
247+
"RenderCompositeRequest",
248+
"RenderNatalRequest",
249+
"RenderOptions",
250+
"RenderSynastryRequest",
251+
"RenderTransitRequest",
89252
"ReportOptions",
90253
"RetryConfig",
254+
"ReturnTransitReportRequest",
255+
"SearchLocationsRequest",
256+
"SignTextHoroscopeRequest",
91257
"SimpleDate",
258+
"SingleSubjectRequest",
259+
"SolarReturnReportRequest",
92260
"SolarReturnRequest",
93261
"Subject",
94262
"SunSignHoroscopeRequest",
95263
"SynastryAnalysisRequest",
96264
"SynastryChartRequest",
265+
"TarotBirthCardsRequest",
266+
"TarotDignitiesRequest",
267+
"TarotNatalReportRequest",
268+
"TarotOptimalTimesRequest",
269+
"TarotQuintessenceRequest",
97270
"TarotReadingRequest",
271+
"TarotReportRequest",
272+
"TarotTimingRequest",
273+
"TikkunRequest",
274+
"TraditionalAnalysisRequest",
98275
"TransitAnalysisRequest",
99276
"TransitChartRequest",
277+
"TreeOfLifeChartRequest",
278+
"VedicCharaDashaRequest",
279+
"VedicChartOptions",
280+
"VedicChartRequest",
281+
"VedicDashaRequest",
282+
"VedicDivisionalChartRequest",
283+
"VedicFestivalRequest",
284+
"VedicKPRequest",
285+
"VedicKundliRequest",
286+
"VedicOptions",
287+
"VedicPanchangRequest",
288+
"VedicRegionalPanchangRequest",
289+
"VedicRemediesRequest",
290+
"VedicRequest",
291+
"VedicSVGOptions",
292+
"VedicSadeSatiRequest",
293+
"VedicTransitRequest",
294+
"VedicVarshaphalRequest",
295+
"VedicYogaRequest",
296+
"VenusReturnReportRequest",
297+
"VenusReturnRequest",
100298
"WellnessInsightRequest",
299+
"YearlyForecastRequest",
300+
"ZiweiChartRequest",
101301
"__version__",
102302
]

src/astroapi/categories/__init__.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,24 @@
1010
from astroapi.categories.data import DataClient
1111
from astroapi.categories.eclipses import EclipsesClient
1212
from astroapi.categories.enhanced import EnhancedClient
13+
from astroapi.categories.fengshui import FengshuiClient
1314
from astroapi.categories.fixed_stars import FixedStarsClient
1415
from astroapi.categories.glossary import GlossaryClient
16+
from astroapi.categories.horary import HoraryClient
1517
from astroapi.categories.horoscope import HoroscopeClient
18+
from astroapi.categories.human_design import HumanDesignClient
1619
from astroapi.categories.insights import InsightsClient
20+
from astroapi.categories.kabbalah import KabbalahClient
1721
from astroapi.categories.lunar import LunarClient
1822
from astroapi.categories.numerology import NumerologyClient
23+
from astroapi.categories.palmistry import PalmistryClient
24+
from astroapi.categories.pdf import PdfClient
25+
from astroapi.categories.render import RenderClient
1926
from astroapi.categories.svg import SvgClient
2027
from astroapi.categories.tarot import TarotClient
2128
from astroapi.categories.traditional import TraditionalClient
29+
from astroapi.categories.vedic import VedicClient
30+
from astroapi.categories.ziwei import ZiweiClient
2231

2332
__all__ = [
2433
"AnalysisClient",
@@ -29,13 +38,22 @@
2938
"DataClient",
3039
"EclipsesClient",
3140
"EnhancedClient",
41+
"FengshuiClient",
3242
"FixedStarsClient",
3343
"GlossaryClient",
44+
"HoraryClient",
3445
"HoroscopeClient",
46+
"HumanDesignClient",
3547
"InsightsClient",
48+
"KabbalahClient",
3649
"LunarClient",
3750
"NumerologyClient",
51+
"PalmistryClient",
52+
"PdfClient",
53+
"RenderClient",
3854
"SvgClient",
3955
"TarotClient",
4056
"TraditionalClient",
57+
"VedicClient",
58+
"ZiweiClient",
4159
]

0 commit comments

Comments
 (0)