File: pwm_import_validation.cpp

package info (click to toggle)
megacmd 2.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 32,592 kB
  • sloc: cpp: 326,437; ansic: 34,524; python: 4,630; java: 3,965; sh: 2,869; objc: 2,459; makefile: 197; xml: 113
file content (73 lines) | stat: -rw-r--r-- 2,979 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "mega/megaclient.h"
#include "mega/name_collision.h"
#include "mega/pwm_file_parser.h"

#include <gmock/gmock.h>
#include <gtest/gtest.h>

using namespace mega::ncoll;
using namespace mega::pwm::import;
using namespace testing;
using namespace mega;

TEST(PWMImportValidator, NormalExecutionNoConflicts)
{
    NameCollisionSolver solver{};
    std::vector<PassEntryParseResult> entries{
        {{}, "pas,test", "passName", "test.com", "uName", "pass", {}},
        {{}, "pas,foo", "passName2", "foo.com", "uName2", "pass2", "Notes 1"},
        {PassEntryParseResult::ErrCode::INVALID_NUM_OF_COLUMN, "i,num,of", {}, {}, {}, {}, {}},
        {{}, "noPassword,foo.com", "noPassword", "foo.com", "name", "", "Notes 1"},
        {{}, "pas,bar", "", "foo.com", "NoPasName", "pass2", "Notes 1"},
    };

    auto [bad, good] = MegaClient::validatePasswordEntries(std::move(entries), solver);

    // Check bad
    ASSERT_EQ(bad.size(), 3);
    ASSERT_THAT(bad, Contains(Pair("i,num,of", PasswordEntryError::PARSE_ERROR)));
    ASSERT_THAT(bad, Contains(Pair("noPassword,foo.com", PasswordEntryError::MISSING_PASSWORD)));
    ASSERT_THAT(bad, Contains(Pair("pas,bar", PasswordEntryError::MISSING_NAME)));

    // Check good
    ASSERT_EQ(good.size(), 2);
    // good 1
    ASSERT_NE(good["passName"], nullptr);
    ASSERT_EQ(good["passName"]->map[AttrMap::string2nameid(MegaClient::PWM_ATTR_PASSWORD_URL)],
              "test.com");
    ASSERT_EQ(good["passName"]->map[AttrMap::string2nameid(MegaClient::PWM_ATTR_PASSWORD_PWD)],
              "pass");
    ASSERT_EQ(good["passName"]->map[AttrMap::string2nameid(MegaClient::PWM_ATTR_PASSWORD_NOTES)],
              "");
    // good 2
    ASSERT_NE(good["passName2"], nullptr);
    ASSERT_EQ(good["passName2"]->map[AttrMap::string2nameid(MegaClient::PWM_ATTR_PASSWORD_URL)],
              "foo.com");
    ASSERT_EQ(good["passName2"]->map[AttrMap::string2nameid(MegaClient::PWM_ATTR_PASSWORD_NOTES)],
              "Notes 1");
}

TEST(PWMImportValidator, WithNameCollisions)
{
    NameCollisionSolver solver({"passName", "passName (1)", "passName (3)"});
    std::vector<PassEntryParseResult> entries{
        {{}, "pas,test", "passName",     "test.com", "uName",  "pass",  {}       },
        {{}, "pas,foo",  "passName2",    "foo.com",  "uName2", "pass2", "Notes 1"},
        {{}, "pas,foo",  "passName (2)", "foo.com",  "uName2", "pass2", "Notes 1"},
    };

    auto [bad, good] = MegaClient::validatePasswordEntries(std::move(entries), solver);

    ASSERT_TRUE(bad.empty());

    ASSERT_EQ(good.size(), 3);
    ASSERT_THAT(good, Contains(Key("passName (2)")));
    ASSERT_EQ(good["passName (2)"]->map[AttrMap::string2nameid(MegaClient::PWM_ATTR_PASSWORD_URL)],
              "test.com");

    ASSERT_THAT(good, Contains(Key("passName2")));

    ASSERT_THAT(good, Contains(Key("passName (4)")));
    ASSERT_EQ(good["passName (4)"]->map[AttrMap::string2nameid(MegaClient::PWM_ATTR_PASSWORD_URL)],
              "foo.com");
}