diff --git a/lib/MPW.rb b/lib/MPW.rb index a29cff0..1b1b81a 100644 --- a/lib/MPW.rb +++ b/lib/MPW.rb @@ -29,6 +29,8 @@ module MPW # @args: password -> the GPG key password # @rtrn: true if data has been decrypted def decrypt(password=nil) + @data = [] + if File.exist?(@file_gpg) and not File.zero?(@file_gpg) crypto = GPGME::Crypto.new(armor: true) data_decrypt = crypto.decrypt(IO.read(@file_gpg), password: password).read.force_encoding('utf-8') @@ -165,7 +167,7 @@ module MPW CSV.open(file, 'w', write_headers: true, headers: ['name', 'group', 'protocol', 'host', 'user', 'password', 'port', 'comment']) do |csv| @data.each do |item| - csv << [item.id, item.group, item.protocol, item.host, item.user, item.password, item.port, item.comment] + csv << [item.name, item.group, item.protocol, item.host, item.user, item.password, item.port, item.comment] end end @@ -212,7 +214,7 @@ module MPW group: row['group'], host: row['host'], protocol: row['protocol'], - login: row['login'], + user: row['user'], password: row['password'], port: row['port'], comment: row['comment'], @@ -229,7 +231,7 @@ module MPW group: row['group'], host: row['host'], protocol: row['protocol'], - login: row['login'], + user: row['user'], password: row['password'], port: row['port'], comment: row['comment'], diff --git a/test/files/test_import.csv b/test/files/test_import.csv index 1452c07..74c1844 100644 --- a/test/files/test_import.csv +++ b/test/files/test_import.csv @@ -1,3 +1,3 @@ -name,group,protocol,host,login,password,port,comment -test_name_csv,test_group_csv,test_protocol_csv,test_host_csv,test_login_csv,test_password_csv,44,test_comment_csv -test_name_update_csv,test_group_update_csv,test_protocol_update_csv,test_host_update_csv,test_login_update_csv,test_password_update_csv,45,test_comment_update_csv +name,group,protocol,host,user,password,port,comment +test_name,test_group,test_protocol,test_host,test_user,test_password,42,test_comment +test_name_update,test_group_update,test_protocol_update,test_host_update,test_user_update,test_password_update,43,test_comment_update diff --git a/test/files/test_import.yml b/test/files/test_import.yml index e7fef00..889a264 100644 --- a/test/files/test_import.yml +++ b/test/files/test_import.yml @@ -5,7 +5,7 @@ XWas7vpy0HerhOYd: group: test_group host: test_host protocol: test_protocol - login: test_login + user: test_user password: test_password port: 42 comment: test_comment @@ -16,7 +16,7 @@ D7URyJENLa91jt0b: group: test_group_update host: test_host_update protocol: test_protocol_update - login: test_login_update + user: test_user_update password: test_password_update port: 43 comment: test_comment_update diff --git a/test/test_mpw.rb b/test/test_mpw.rb index 94bbfa3..e8b51bf 100644 --- a/test/test_mpw.rb +++ b/test/test_mpw.rb @@ -1,13 +1,14 @@ #!/usr/bin/ruby require_relative '../lib/MPW' +require_relative '../lib/Item' require 'test/unit' require 'yaml' require 'csv' class TestMPW < Test::Unit::TestCase def setup - @fixture_file = 'files/fixtures.yml' + fixture_file = 'files/fixtures.yml' file_gpg = 'test.gpg' key = ENV['MPW_TEST_KEY'] @@ -19,45 +20,47 @@ class TestMPW < Test::Unit::TestCase end File.delete(file_gpg) if File.exist?(file_gpg) - @mpw = MPW::MPW.new(file_gpg, key) - @fixtures = YAML.load_file(@fixture_file) + + @mpw = MPW::MPW.new(file_gpg, key) + @fixtures = YAML.load_file(fixture_file) end def test_01_import_yaml import_file = 'files/test_import.yml' assert(@mpw.import(import_file, :yaml)) - assert_equal(2, @mpw.search.length) + assert_equal(2, @mpw.list.length) - result = @mpw.search[0] - assert_equal(@fixtures['add']['name'], result['name']) - assert_equal(@fixtures['add']['group'], result['group']) - assert_equal(@fixtures['add']['host'], result['host']) - assert_equal(@fixtures['add']['protocol'], result['protocol']) - assert_equal(@fixtures['add']['login'], result['login']) - assert_equal(@fixtures['add']['password'], result['password']) - assert_equal(@fixtures['add']['port'].to_i, result['port']) - assert_equal(@fixtures['add']['comment'], result['comment']) + item = @mpw.list[0] + assert_equal(@fixtures['add_new']['name'], item.name) + assert_equal(@fixtures['add_new']['group'], item.group) + assert_equal(@fixtures['add_new']['host'], item.host) + assert_equal(@fixtures['add_new']['protocol'], item.protocol) + assert_equal(@fixtures['add_new']['user'], item.user) + assert_equal(@fixtures['add_new']['password'], item.password) + assert_equal(@fixtures['add_new']['port'].to_i, item.port) + assert_equal(@fixtures['add_new']['comment'], item.comment) end def test_02_export_yaml + import_file = 'files/test_import.yml' export_file = 'test_export.yml' - assert(@mpw.import(@fixture_file)) - assert_equal(2, @mpw.search.length) + assert(@mpw.import(import_file)) + assert_equal(2, @mpw.list.length) assert(@mpw.export(export_file, :yaml)) export = YAML::load_file(export_file) assert_equal(2, export.length) result = export.values[0] - assert_equal(@fixtures['add']['name'], result['name']) - assert_equal(@fixtures['add']['group'], result['group']) - assert_equal(@fixtures['add']['host'], result['host']) - assert_equal(@fixtures['add']['protocol'], result['protocol']) - assert_equal(@fixtures['add']['login'], result['login']) - assert_equal(@fixtures['add']['password'], result['password']) - assert_equal(@fixtures['add']['port'].to_i, result['port']) - assert_equal(@fixtures['add']['comment'], result['comment']) + assert_equal(@fixtures['add_new']['name'], result['name']) + assert_equal(@fixtures['add_new']['group'], result['group']) + assert_equal(@fixtures['add_new']['host'], result['host']) + assert_equal(@fixtures['add_new']['protocol'], result['protocol']) + assert_equal(@fixtures['add_new']['user'], result['user']) + assert_equal(@fixtures['add_new']['password'], result['password']) + assert_equal(@fixtures['add_new']['port'].to_i, result['port']) + assert_equal(@fixtures['add_new']['comment'], result['comment']) File.unlink(export_file) end @@ -66,155 +69,73 @@ class TestMPW < Test::Unit::TestCase import_file = 'files/test_import.csv' assert(@mpw.import(import_file, :csv)) - assert_equal(2, @mpw.search.length) + assert_equal(2, @mpw.list.length) import = CSV.parse(File.read(import_file), headers: true) - result = @mpw.search[0] - assert_equal(import[0]['name'], result['name']) - assert_equal(import[0]['group'], result['group']) - assert_equal(import[0]['host'], result['host']) - assert_equal(import[0]['protocol'], result['protocol']) - assert_equal(import[0]['login'], result['login']) - assert_equal(import[0]['password'], result['password']) - assert_equal(import[0]['port'].to_i, result['port']) - assert_equal(import[0]['comment'], result['comment']) + item = @mpw.list[0] + assert_equal(import[0]['name'], item.name) + assert_equal(import[0]['group'], item.group) + assert_equal(import[0]['host'], item.host) + assert_equal(import[0]['protocol'], item.protocol) + assert_equal(import[0]['user'], item.user) + assert_equal(import[0]['password'], item.password) + assert_equal(import[0]['port'].to_i, item.port) + assert_equal(import[0]['comment'], item.comment) end def test_04_export_csv + import_file = 'files/test_import.csv' export_file = 'test_export.csv' - assert(@mpw.import(@fixture_file)) - assert_equal(2, @mpw.search.length) + + assert(@mpw.import(import_file, :csv)) + assert_equal(2, @mpw.list.length) assert(@mpw.export(export_file, :csv)) export = CSV.parse(File.read(export_file), headers: true) assert_equal(2, export.length) result = export[0] - assert_equal(@fixtures['add']['name'], result['name']) - assert_equal(@fixtures['add']['group'], result['group']) - assert_equal(@fixtures['add']['host'], result['host']) - assert_equal(@fixtures['add']['protocol'], result['protocol']) - assert_equal(@fixtures['add']['login'], result['login']) - assert_equal(@fixtures['add']['password'], result['password']) - assert_equal(@fixtures['add']['port'], result['port']) - assert_equal(@fixtures['add']['comment'], result['comment']) + assert_equal(@fixtures['add_new']['name'], result['name']) + assert_equal(@fixtures['add_new']['group'], result['group']) + assert_equal(@fixtures['add_new']['host'], result['host']) + assert_equal(@fixtures['add_new']['protocol'], result['protocol']) + assert_equal(@fixtures['add_new']['user'], result['user']) + assert_equal(@fixtures['add_new']['password'], result['password']) + assert_equal(@fixtures['add_new']['port'], result['port']) + assert_equal(@fixtures['add_new']['comment'], result['comment']) File.unlink(export_file) end - def test_05_add - assert(@mpw.update(@fixtures['add']['name'], - @fixtures['add']['group'], - @fixtures['add']['host'], - @fixtures['add']['protocol'], - @fixtures['add']['login'], - @fixtures['add']['password'], - @fixtures['add']['port'], - @fixtures['add']['comment'])) + def test_05_add_item + data = {name: @fixtures['add_new']['name'], + group: @fixtures['add_new']['group'], + host: @fixtures['add_new']['host'], + protocol: @fixtures['add_new']['protocol'], + user: @fixtures['add_new']['user'], + password: @fixtures['add_new']['password'], + port: @fixtures['add_new']['port'], + comment: @fixtures['add_new']['comment'], + } + + item = MPW::Item.new(data) - assert_equal(1, @mpw.search.length) + assert(!item.nil?) + assert(!item.empty?) - result = @mpw.search[0] - assert_equal(@fixtures['add']['name'], result['name']) - assert_equal(@fixtures['add']['group'], result['group']) - assert_equal(@fixtures['add']['host'], result['host']) - assert_equal(@fixtures['add']['protocol'], result['protocol']) - assert_equal(@fixtures['add']['login'], result['login']) - assert_equal(@fixtures['add']['password'], result['password']) - assert_equal(@fixtures['add']['port'].to_i, result['port']) - assert_equal(@fixtures['add']['comment'], result['comment']) + assert(@mpw.add(item)) - assert(@mpw.update(@fixtures['add']['name'], - @fixtures['add']['group'], - @fixtures['add']['host'], - @fixtures['add']['protocol'], - @fixtures['add']['login'], - @fixtures['add']['password'], - @fixtures['add']['port'], - @fixtures['add']['comment'])) + assert_equal(1, @mpw.list.length) - - assert_equal(2, @mpw.search.length) - end - - def test_06_add_empty_name - assert(!@mpw.update('', - @fixtures['add']['group'], - @fixtures['add']['host'], - @fixtures['add']['protocol'], - @fixtures['add']['login'], - @fixtures['add']['password'], - @fixtures['add']['port'], - @fixtures['add']['comment'])) - - assert_equal(0, @mpw.search.length) - end - - def test_07_update_empty - assert(@mpw.import(@fixture_file, :yaml)) - assert_equal(2, @mpw.search.length) - - id = @mpw.search[0]['id'] - - assert(@mpw.update('','', '','','','','', '', id)) - - result = @mpw.search_by_id(id) - assert_equal(@fixtures['add']['name'], result['name']) - assert_equal(@fixtures['add']['group'], result['group']) - assert_equal(@fixtures['add']['host'], result['host']) - assert_equal(@fixtures['add']['protocol'], result['protocol']) - assert_equal(@fixtures['add']['login'], result['login']) - assert_equal(@fixtures['add']['password'], result['password']) - assert_equal(@fixtures['add']['port'].to_i, result['port']) - assert_equal(@fixtures['add']['comment'], result['comment']) - end - - def test_08_update - assert(@mpw.import(@fixture_file, :yaml)) - assert_equal(2, @mpw.search.length) - - id = @mpw.search[0]['id'] - - assert(@mpw.update(@fixtures['update']['name'], - @fixtures['update']['group'], - @fixtures['update']['host'], - @fixtures['update']['protocol'], - @fixtures['update']['login'], - @fixtures['update']['password'], - @fixtures['update']['port'], - @fixtures['update']['comment'], - id)) - - assert_equal(2, @mpw.search.length) - - result = @mpw.search_by_id(id) - assert_equal(@fixtures['update']['name'], result['name']) - assert_equal(@fixtures['update']['group'], result['group']) - assert_equal(@fixtures['update']['host'], result['host']) - assert_equal(@fixtures['update']['protocol'], result['protocol']) - assert_equal(@fixtures['update']['login'], result['login']) - assert_equal(@fixtures['update']['password'], result['password']) - assert_equal(@fixtures['update']['port'].to_i, result['port']) - assert_equal(@fixtures['update']['comment'], result['comment']) - end - - def test_09_remove - assert(@mpw.import(@fixture_file, :yaml)) - assert_equal(2, @mpw.search.length) - - id = @mpw.search[0]['id'] - assert(@mpw.remove(id)) - - assert_equal(1, @mpw.search.length) - end - - def test_10_remove_noexistent - assert(@mpw.import(@fixture_file, :yaml)) - assert_equal(2, @mpw.search.length) - - assert(!@mpw.remove('TEST_NOEXISTENT_ID')) - - assert_equal(2, @mpw.search.length) + item = @mpw.list[0] + assert_equal(@fixtures['add_new']['name'], item.name) + assert_equal(@fixtures['add_new']['group'], item.group) + assert_equal(@fixtures['add_new']['host'], item.host) + assert_equal(@fixtures['add_new']['protocol'], item.protocol) + assert_equal(@fixtures['add_new']['user'], item.user) + assert_equal(@fixtures['add_new']['password'], item.password) + assert_equal(@fixtures['add_new']['port'].to_i, item.port) + assert_equal(@fixtures['add_new']['comment'], item.comment) end def test_11_encrypt_empty_file @@ -222,75 +143,38 @@ class TestMPW < Test::Unit::TestCase end def test_12_encrypt - assert(@mpw.import(@fixture_file, :yaml)) - assert_equal(2, @mpw.search.length) + import_file = 'files/test_import.yml' + + assert(@mpw.import(import_file, :yaml)) + assert_equal(2, @mpw.list.length) assert(@mpw.encrypt) end def test_13_decrypt_empty_file assert(@mpw.decrypt) - assert_equal(0, @mpw.search.length) + assert_equal(0, @mpw.list.length) end def test_14_decrypt - assert(@mpw.import(@fixture_file, :yaml)) - assert_equal(2, @mpw.search.length) + import_file = 'files/test_import.yml' + + assert(@mpw.import(import_file, :yaml)) + assert_equal(2, @mpw.list.length) assert(@mpw.encrypt) assert(@mpw.decrypt) - assert_equal(2, @mpw.search.length) + assert_equal(2, @mpw.list.length) - result = @mpw.search[0] - assert_equal(@fixtures['add']['name'], result['name']) - assert_equal(@fixtures['add']['group'], result['group']) - assert_equal(@fixtures['add']['host'], result['host']) - assert_equal(@fixtures['add']['protocol'], result['protocol']) - assert_equal(@fixtures['add']['login'], result['login']) - assert_equal(@fixtures['add']['password'], result['password']) - assert_equal(@fixtures['add']['port'].to_i, result['port']) - assert_equal(@fixtures['add']['comment'], result['comment']) - end - - def test_15_sync_local_empty - import_file = 'files/test_import.yml' - - data = [] - YAML.load_file(import_file).each_value { |v| data.push(v) } - - @mpw.sync(data, 0) - - result = @mpw.search[0] - assert_equal(@fixtures['add']['name'], result['name']) - assert_equal(@fixtures['add']['group'], result['group']) - assert_equal(@fixtures['add']['host'], result['host']) - assert_equal(@fixtures['add']['protocol'], result['protocol']) - assert_equal(@fixtures['add']['login'], result['login']) - assert_equal(@fixtures['add']['password'], result['password']) - assert_equal(@fixtures['add']['port'].to_i, result['port']) - assert_equal(@fixtures['add']['comment'], result['comment']) - - assert_equal(2, @mpw.search.length) - end - - def test_16_sync_remote_outdated_and_local_empty - import_file = 'files/test_import.yml' - - data = [] - YAML.load_file(import_file).each_value { |v| data.push(v) } - - assert(@mpw.sync(data, Time.now.to_i)) - - assert_equal(0, @mpw.search.length) - end - - def test_17_sync_empty_data - assert(@mpw.import(@fixture_file, :yaml)) - assert_equal(2, @mpw.search.length) - - assert(@mpw.sync([], 0)) - - assert_equal(2, @mpw.search.length) + item = @mpw.list[0] + assert_equal(@fixtures['add_new']['name'], item.name) + assert_equal(@fixtures['add_new']['group'], item.group) + assert_equal(@fixtures['add_new']['host'], item.host) + assert_equal(@fixtures['add_new']['protocol'], item.protocol) + assert_equal(@fixtures['add_new']['user'], item.user) + assert_equal(@fixtures['add_new']['password'], item.password) + assert_equal(@fixtures['add_new']['port'].to_i, item.port) + assert_equal(@fixtures['add_new']['comment'], item.comment) end end