|
1 | 1 | import * as memCache from './cache/memory'; |
2 | 2 | import { |
| 3 | + AbandonedPackageStats, |
3 | 4 | DatasourceCacheStats, |
4 | 5 | HttpCacheStats, |
5 | 6 | HttpStats, |
@@ -574,4 +575,95 @@ describe('util/stats', () => { |
574 | 575 | }); |
575 | 576 | }); |
576 | 577 | }); |
| 578 | + |
| 579 | + describe('AbandonmentStats', () => { |
| 580 | + beforeEach(() => { |
| 581 | + memCache.init(); |
| 582 | + }); |
| 583 | + |
| 584 | + it('returns empty report', () => { |
| 585 | + const res = AbandonedPackageStats.getReport(); |
| 586 | + expect(res).toEqual({}); |
| 587 | + }); |
| 588 | + |
| 589 | + it('writes data points', () => { |
| 590 | + AbandonedPackageStats.write( |
| 591 | + 'npm', |
| 592 | + 'package1', |
| 593 | + '2023-01-01T00:00:00.000Z', |
| 594 | + ); |
| 595 | + AbandonedPackageStats.write( |
| 596 | + 'npm', |
| 597 | + 'package2', |
| 598 | + '2023-02-01T00:00:00.000Z', |
| 599 | + ); |
| 600 | + AbandonedPackageStats.write( |
| 601 | + 'docker', |
| 602 | + 'image1', |
| 603 | + '2023-03-01T00:00:00.000Z', |
| 604 | + ); |
| 605 | + |
| 606 | + const data = AbandonedPackageStats.getData(); |
| 607 | + expect(data).toEqual([ |
| 608 | + { |
| 609 | + datasource: 'npm', |
| 610 | + packageName: 'package1', |
| 611 | + mostRecentTimestamp: '2023-01-01T00:00:00.000Z', |
| 612 | + }, |
| 613 | + { |
| 614 | + datasource: 'npm', |
| 615 | + packageName: 'package2', |
| 616 | + mostRecentTimestamp: '2023-02-01T00:00:00.000Z', |
| 617 | + }, |
| 618 | + { |
| 619 | + datasource: 'docker', |
| 620 | + packageName: 'image1', |
| 621 | + mostRecentTimestamp: '2023-03-01T00:00:00.000Z', |
| 622 | + }, |
| 623 | + ]); |
| 624 | + |
| 625 | + const report = AbandonedPackageStats.getReport(); |
| 626 | + expect(report).toEqual({ |
| 627 | + npm: { |
| 628 | + package1: '2023-01-01T00:00:00.000Z', |
| 629 | + package2: '2023-02-01T00:00:00.000Z', |
| 630 | + }, |
| 631 | + docker: { |
| 632 | + image1: '2023-03-01T00:00:00.000Z', |
| 633 | + }, |
| 634 | + }); |
| 635 | + }); |
| 636 | + |
| 637 | + it('logs report', () => { |
| 638 | + AbandonedPackageStats.write( |
| 639 | + 'npm', |
| 640 | + 'package1', |
| 641 | + '2023-01-01T00:00:00.000Z', |
| 642 | + ); |
| 643 | + AbandonedPackageStats.write( |
| 644 | + 'docker', |
| 645 | + 'image1', |
| 646 | + '2023-03-01T00:00:00.000Z', |
| 647 | + ); |
| 648 | + |
| 649 | + AbandonedPackageStats.report(); |
| 650 | + |
| 651 | + expect(logger.logger.debug).toHaveBeenCalledTimes(1); |
| 652 | + const [data, msg] = logger.logger.debug.mock.calls[0]; |
| 653 | + expect(msg).toBe('Abandoned package statistics'); |
| 654 | + expect(data).toEqual({ |
| 655 | + npm: { |
| 656 | + package1: '2023-01-01T00:00:00.000Z', |
| 657 | + }, |
| 658 | + docker: { |
| 659 | + image1: '2023-03-01T00:00:00.000Z', |
| 660 | + }, |
| 661 | + }); |
| 662 | + }); |
| 663 | + |
| 664 | + it('does not log report when no data', () => { |
| 665 | + AbandonedPackageStats.report(); |
| 666 | + expect(logger.logger.debug).not.toHaveBeenCalled(); |
| 667 | + }); |
| 668 | + }); |
577 | 669 | }); |
0 commit comments