Skip to content

Commit 2cad4ad

Browse files
committed
Imoproved
1 parent b0f48bd commit 2cad4ad

File tree

4 files changed

+80
-2
lines changed

4 files changed

+80
-2
lines changed

app/interfaces/include/interfaces/parsers/IParsersFactory.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,23 @@
55
#ifndef DESIGN_PATTERNS_IPARSERSFACTORY_H
66
#define DESIGN_PATTERNS_IPARSERSFACTORY_H
77

8+
#include <memory>
9+
#include "parsers/ICredentialsParser.h"
10+
#include "parsers/IReportParser.h"
11+
12+
namespace parsers
13+
{
14+
class IParserFactory
15+
{
16+
public:
17+
virtual ~IParserFactory() = default;
18+
19+
virtual std::unique_ptr<IReportParser> createReportParser() const = 0;
20+
21+
virtual std::unique_ptr<ICredentialsParser> createCredentialParser() const = 0;
22+
23+
};
24+
}
25+
26+
827
#endif //DESIGN_PATTERNS_IPARSERSFACTORY_H

app/parsers/include/parsers/ParsersFactory.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,25 @@
55
#ifndef DESIGN_PATTERNS_PARSERSFACTORY_H
66
#define DESIGN_PATTERNS_PARSERSFACTORY_H
77

8+
#include "parsers/IParsersFactory.h"
9+
#include <memory>
10+
#include "types/ReportFormat.h"
11+
12+
namespace parsers
13+
{
14+
class ParserFactory : public IParserFactory
15+
{
16+
public:
17+
ParserFactory(const types::ReportFormat);
18+
19+
std::unique_ptr<IReportParser> createReportParser() const override;
20+
21+
std::unique_ptr<ICredentialsParser> createCredentialParser() const override;
22+
23+
private:
24+
const types::ReportFormat reportFormat;
25+
};
26+
}
27+
28+
829
#endif //DESIGN_PATTERNS_PARSERSFACTORY_H

app/parsers/src/ParsersFactory.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,34 @@
55
#include "parsers/ParsersFactory.h"
66
#include "parsers/JsonParser.h"
77
#include "parsers/ValidatedReportParser.h"
8-
#include "parsers/XmlParser.h"
8+
#include "parsers/XmlParser.h"
9+
10+
namespace parsers
11+
{
12+
ParserFactory::ParserFactory(const types::ReportFormat rF) : reportFormat{rF} {}
13+
14+
std::unique_ptr<IReportParser> ParserFactory::createReportParser() const
15+
{
16+
switch (reportFormat)
17+
{
18+
case types::ReportFormat::Json:
19+
return std::make_unique<parsers::ValidatedReportParser<JsonParser>>();
20+
21+
case types::ReportFormat::Xml:
22+
return std::make_unique<parsers::ValidatedReportParser<XmlParser>>();
23+
}
24+
return nullptr;
25+
}
26+
27+
std::unique_ptr<ICredentialsParser> ParserFactory::createCredentialParser() const
28+
{
29+
switch (reportFormat)
30+
{
31+
case types::ReportFormat::Json:
32+
return std::make_unique<JsonParser>();
33+
case types::ReportFormat::Xml:
34+
return std::make_unique<XmlParser>();
35+
}
36+
return nullptr;
37+
}
38+
}

app/parsers/test/ValidatedReportParser_tests.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ namespace parsers
4848

4949
TEST_F(ValidatedReportParserTest, reportValidationSucceeds)
5050
{
51-
// ASSERT_NE(sut.parseReport(validReport), std::nullopt);
51+
ASSERT_NE(sut.parseReport(validReport), std::nullopt);
52+
}
53+
54+
TEST_F(ValidatedReportParserTest, reportValidationFails)
55+
{
56+
for (const auto &item: invalidReports)
57+
{
58+
ASSERT_EQ(sut.parseReport(item), std::nullopt);
59+
}
5260
}
5361
}

0 commit comments

Comments
 (0)