{"action":"created","comment":{"url":"https://api.github.com/repos/hyperledger/iroha/pulls/comments/165283114","pull_request_review_id":93193973,"id":165283114,"diff_hunk":"@@ -0,0 +1,215 @@\n+/**\n+ * Copyright Soramitsu Co., Ltd. 2018 All Rights Reserved.\n+ * http://soramitsu.co.jp\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *        http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+#ifndef IROHA_PROTO_QUERY_BUILDER_TEMPLATE_HPP\n+#define IROHA_PROTO_QUERY_BUILDER_TEMPLATE_HPP\n+\n+#include \"backend/protobuf/queries/proto_query.hpp\"\n+#include \"builders/protobuf/unsigned_proto.hpp\"\n+#include \"interfaces/common_objects/types.hpp\"\n+#include \"interfaces/transaction.hpp\"\n+#include \"queries.pb.h\"\n+#include \"validators/default_validator.hpp\"\n+\n+namespace shared_model {\n+  namespace proto {\n+\n+    template <int S = 0, typename SV = validation::DefaultQueryValidator, typename BT = UnsignedWrapper<Query>>","path":"shared_model/builders/protobuf/builder_templates/query_template.hpp","position":31,"original_position":31,"commit_id":"297f222cbfb617a166392a72873c3c0e5dc04efa","original_commit_id":"297f222cbfb617a166392a72873c3c0e5dc04efa","user":{"login":"kamilsa","id":9370151,"avatar_url":"https://avatars3.githubusercontent.com/u/9370151?v=4","gravatar_id":"","url":"https://api.github.com/users/kamilsa","html_url":"https://github.com/kamilsa","followers_url":"https://api.github.com/users/kamilsa/followers","following_url":"https://api.github.com/users/kamilsa/following{/other_user}","gists_url":"https://api.github.com/users/kamilsa/gists{/gist_id}","starred_url":"https://api.github.com/users/kamilsa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kamilsa/subscriptions","organizations_url":"https://api.github.com/users/kamilsa/orgs","repos_url":"https://api.github.com/users/kamilsa/repos","events_url":"https://api.github.com/users/kamilsa/events{/privacy}","received_events_url":"https://api.github.com/users/kamilsa/received_events","type":"User","site_admin":false},"body":"Note, new template argument is introduced","created_at":"2018-02-01T08:15:46Z","updated_at":"2018-02-01T08:15:46Z","html_url":"https://github.com/hyperledger/iroha/pull/929#discussion_r165283114","pull_request_url":"https://api.github.com/repos/hyperledger/iroha/pulls/929","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/hyperledger/iroha/pulls/comments/165283114"},"html":{"href":"https://github.com/hyperledger/iroha/pull/929#discussion_r165283114"},"pull_request":{"href":"https://api.github.com/repos/hyperledger/iroha/pulls/929"}}},"pull_request":{"url":"https://api.github.com/repos/hyperledger/iroha/pulls/929","id":166246041,"html_url":"https://github.com/hyperledger/iroha/pull/929","diff_url":"https://github.com/hyperledger/iroha/pull/929.diff","patch_url":"https://github.com/hyperledger/iroha/pull/929.patch","issue_url":"https://api.github.com/repos/hyperledger/iroha/issues/929","number":929,"state":"open","locked":false,"title":"Test builders","user":{"login":"kamilsa","id":9370151,"avatar_url":"https://avatars3.githubusercontent.com/u/9370151?v=4","gravatar_id":"","url":"https://api.github.com/users/kamilsa","html_url":"https://github.com/kamilsa","followers_url":"https://api.github.com/users/kamilsa/followers","following_url":"https://api.github.com/users/kamilsa/following{/other_user}","gists_url":"https://api.github.com/users/kamilsa/gists{/gist_id}","starred_url":"https://api.github.com/users/kamilsa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kamilsa/subscriptions","organizations_url":"https://api.github.com/users/kamilsa/orgs","repos_url":"https://api.github.com/users/kamilsa/repos","events_url":"https://api.github.com/users/kamilsa/events{/privacy}","received_events_url":"https://api.github.com/users/kamilsa/received_events","type":"User","site_admin":false},"body":"<!-- You will not see HTML commented line in Pull Request body -->\r\n<!-- Optional sections may be omitted. Just remove them or write None -->\r\n\r\n<!-- ### Requirements -->\r\n<!-- * Filling out the template is required. Any pull request that does not include enough information to be reviewed in a timely manner may be closed at the maintainers' discretion. -->\r\n<!-- * All new code must have code coverage above 70% (https://docs.codecov.io/docs/about-code-coverage). -->\r\n<!-- * CircleCI builds must be passed. -->\r\n<!-- * Critical and blocker issues reported by Sorabot must be fixed. -->\r\n<!-- * Branch must be rebased onto base branch (https://soramitsu.atlassian.net/wiki/spaces/IS/pages/11173889/Rebase+and+merge+guide). -->\r\n\r\n\r\n### Description of the Change\r\n\r\n1. Adds test builders for transaction and query creation. \r\n2. Creates two new validators to query and transaction which always return empty answer with no errors (for test purposes)\r\n3. Introduces new template parameter to query and transaction builder defining build type of the builder\r\n4. Moves template tx and query builders into separate folders. Now transaction and query builders have only using definitions inside\r\n\r\n### Benefits\r\n\r\nNow we can build any transaction or query shared model objects using new builders, which has similar interfaces with the real builders\r\n\r\n<!-- What benefits will be realized by the code change? -->\r\n\r\n### Possible Drawbacks \r\n\r\nUnfortunately, we cannot use mocks to replace validators in tests because of drawback of google mock classes -- they cannot be copied. That prevents using them in builders, because every time we add new command to transaction we internally copy builder object, which is not possible when we use mock as stateless validator field.\r\n\r\n<!-- What are the possible side-effects or negative impacts of the code change? -->\r\n<!-- If no drawbacks, explicitly mention this (write None) -->\r\n\r\n### Usage Examples or Tests\r\n\r\n```C++\r\n#include \"test_builder.hpp\"\r\n...\r\nshared_model::interface::types::CounterType tx_counter = 1;\r\nstd::string creator_account_id = \"admin@test\";\r\n\r\nTestTransactionBuilder builder;\r\nauto tx = builder.txCounter(tx_counter)\r\n                  .creatorAccountId(creator_account_id)\r\n                  .createdTime(created_time)\r\n                  .build()\r\n```","created_at":"2018-01-31T12:27:25Z","updated_at":"2018-02-01T08:15:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bfad2e38be3562ccf21e01ee19abe384fb1bf648","assignee":null,"assignees":[],"requested_reviewers":[{"login":"l4l","id":5658339,"avatar_url":"https://avatars2.githubusercontent.com/u/5658339?v=4","gravatar_id":"","url":"https://api.github.com/users/l4l","html_url":"https://github.com/l4l","followers_url":"https://api.github.com/users/l4l/followers","following_url":"https://api.github.com/users/l4l/following{/other_user}","gists_url":"https://api.github.com/users/l4l/gists{/gist_id}","starred_url":"https://api.github.com/users/l4l/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/l4l/subscriptions","organizations_url":"https://api.github.com/users/l4l/orgs","repos_url":"https://api.github.com/users/l4l/repos","events_url":"https://api.github.com/users/l4l/events{/privacy}","received_events_url":"https://api.github.com/users/l4l/received_events","type":"User","site_admin":false},{"login":"grimadas","id":5897440,"avatar_url":"https://avatars2.githubusercontent.com/u/5897440?v=4","gravatar_id":"","url":"https://api.github.com/users/grimadas","html_url":"https://github.com/grimadas","followers_url":"https://api.github.com/users/grimadas/followers","following_url":"https://api.github.com/users/grimadas/following{/other_user}","gists_url":"https://api.github.com/users/grimadas/gists{/gist_id}","starred_url":"https://api.github.com/users/grimadas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grimadas/subscriptions","organizations_url":"https://api.github.com/users/grimadas/orgs","repos_url":"https://api.github.com/users/grimadas/repos","events_url":"https://api.github.com/users/grimadas/events{/privacy}","received_events_url":"https://api.github.com/users/grimadas/received_events","type":"User","site_admin":false},{"login":"lebdron","id":14347159,"avatar_url":"https://avatars1.githubusercontent.com/u/14347159?v=4","gravatar_id":"","url":"https://api.github.com/users/lebdron","html_url":"https://github.com/lebdron","followers_url":"https://api.github.com/users/lebdron/followers","following_url":"https://api.github.com/users/lebdron/following{/other_user}","gists_url":"https://api.github.com/users/lebdron/gists{/gist_id}","starred_url":"https://api.github.com/users/lebdron/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lebdron/subscriptions","organizations_url":"https://api.github.com/users/lebdron/orgs","repos_url":"https://api.github.com/users/lebdron/repos","events_url":"https://api.github.com/users/lebdron/events{/privacy}","received_events_url":"https://api.github.com/users/lebdron/received_events","type":"User","site_admin":false}],"requested_teams":[],"milestone":null,"commits_url":"https://api.github.com/repos/hyperledger/iroha/pulls/929/commits","review_comments_url":"https://api.github.com/repos/hyperledger/iroha/pulls/929/comments","review_comment_url":"https://api.github.com/repos/hyperledger/iroha/pulls/comments{/number}","comments_url":"https://api.github.com/repos/hyperledger/iroha/issues/929/comments","statuses_url":"https://api.github.com/repos/hyperledger/iroha/statuses/297f222cbfb617a166392a72873c3c0e5dc04efa","head":{"label":"hyperledger:feature/test-builders","ref":"feature/test-builders","sha":"297f222cbfb617a166392a72873c3c0e5dc04efa","user":{"login":"hyperledger","id":7657900,"avatar_url":"https://avatars2.githubusercontent.com/u/7657900?v=4","gravatar_id":"","url":"https://api.github.com/users/hyperledger","html_url":"https://github.com/hyperledger","followers_url":"https://api.github.com/users/hyperledger/followers","following_url":"https://api.github.com/users/hyperledger/following{/other_user}","gists_url":"https://api.github.com/users/hyperledger/gists{/gist_id}","starred_url":"https://api.github.com/users/hyperledger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hyperledger/subscriptions","organizations_url":"https://api.github.com/users/hyperledger/orgs","repos_url":"https://api.github.com/users/hyperledger/repos","events_url":"https://api.github.com/users/hyperledger/events{/privacy}","received_events_url":"https://api.github.com/users/hyperledger/received_events","type":"Organization","site_admin":false},"repo":{"id":67340575,"name":"iroha","full_name":"hyperledger/iroha","owner":{"login":"hyperledger","id":7657900,"avatar_url":"https://avatars2.githubusercontent.com/u/7657900?v=4","gravatar_id":"","url":"https://api.github.com/users/hyperledger","html_url":"https://github.com/hyperledger","followers_url":"https://api.github.com/users/hyperledger/followers","following_url":"https://api.github.com/users/hyperledger/following{/other_user}","gists_url":"https://api.github.com/users/hyperledger/gists{/gist_id}","starred_url":"https://api.github.com/users/hyperledger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hyperledger/subscriptions","organizations_url":"https://api.github.com/users/hyperledger/orgs","repos_url":"https://api.github.com/users/hyperledger/repos","events_url":"https://api.github.com/users/hyperledger/events{/privacy}","received_events_url":"https://api.github.com/users/hyperledger/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/hyperledger/iroha","description":"Iroha - A simple, decentralized ledger","fork":false,"url":"https://api.github.com/repos/hyperledger/iroha","forks_url":"https://api.github.com/repos/hyperledger/iroha/forks","keys_url":"https://api.github.com/repos/hyperledger/iroha/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hyperledger/iroha/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hyperledger/iroha/teams","hooks_url":"https://api.github.com/repos/hyperledger/iroha/hooks","issue_events_url":"https://api.github.com/repos/hyperledger/iroha/issues/events{/number}","events_url":"https://api.github.com/repos/hyperledger/iroha/events","assignees_url":"https://api.github.com/repos/hyperledger/iroha/assignees{/user}","branches_url":"https://api.github.com/repos/hyperledger/iroha/branches{/branch}","tags_url":"https://api.github.com/repos/hyperledger/iroha/tags","blobs_url":"https://api.github.com/repos/hyperledger/iroha/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hyperledger/iroha/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hyperledger/iroha/git/refs{/sha}","trees_url":"https://api.github.com/repos/hyperledger/iroha/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hyperledger/iroha/statuses/{sha}","languages_url":"https://api.github.com/repos/hyperledger/iroha/languages","stargazers_url":"https://api.github.com/repos/hyperledger/iroha/stargazers","contributors_url":"https://api.github.com/repos/hyperledger/iroha/contributors","subscribers_url":"https://api.github.com/repos/hyperledger/iroha/subscribers","subscription_url":"https://api.github.com/repos/hyperledger/iroha/subscription","commits_url":"https://api.github.com/repos/hyperledger/iroha/commits{/sha}","git_commits_url":"https://api.github.com/repos/hyperledger/iroha/git/commits{/sha}","comments_url":"https://api.github.com/repos/hyperledger/iroha/comments{/number}","issue_comment_url":"https://api.github.com/repos/hyperledger/iroha/issues/comments{/number}","contents_url":"https://api.github.com/repos/hyperledger/iroha/contents/{+path}","compare_url":"https://api.github.com/repos/hyperledger/iroha/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hyperledger/iroha/merges","archive_url":"https://api.github.com/repos/hyperledger/iroha/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hyperledger/iroha/downloads","issues_url":"https://api.github.com/repos/hyperledger/iroha/issues{/number}","pulls_url":"https://api.github.com/repos/hyperledger/iroha/pulls{/number}","milestones_url":"https://api.github.com/repos/hyperledger/iroha/milestones{/number}","notifications_url":"https://api.github.com/repos/hyperledger/iroha/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hyperledger/iroha/labels{/name}","releases_url":"https://api.github.com/repos/hyperledger/iroha/releases{/id}","deployments_url":"https://api.github.com/repos/hyperledger/iroha/deployments","created_at":"2016-09-04T11:17:53Z","updated_at":"2018-02-01T03:22:50Z","pushed_at":"2018-02-01T08:15:12Z","git_url":"git://github.com/hyperledger/iroha.git","ssh_url":"git@github.com:hyperledger/iroha.git","clone_url":"https://github.com/hyperledger/iroha.git","svn_url":"https://github.com/hyperledger/iroha","homepage":"http://iroha.tech","size":44101,"stargazers_count":553,"watchers_count":553,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":187,"mirror_url":null,"archived":false,"open_issues_count":45,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":187,"open_issues":45,"watchers":553,"default_branch":"master"}},"base":{"label":"hyperledger:develop","ref":"develop","sha":"caac95ae89531265fc3d33971a5ab44038bdede6","user":{"login":"hyperledger","id":7657900,"avatar_url":"https://avatars2.githubusercontent.com/u/7657900?v=4","gravatar_id":"","url":"https://api.github.com/users/hyperledger","html_url":"https://github.com/hyperledger","followers_url":"https://api.github.com/users/hyperledger/followers","following_url":"https://api.github.com/users/hyperledger/following{/other_user}","gists_url":"https://api.github.com/users/hyperledger/gists{/gist_id}","starred_url":"https://api.github.com/users/hyperledger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hyperledger/subscriptions","organizations_url":"https://api.github.com/users/hyperledger/orgs","repos_url":"https://api.github.com/users/hyperledger/repos","events_url":"https://api.github.com/users/hyperledger/events{/privacy}","received_events_url":"https://api.github.com/users/hyperledger/received_events","type":"Organization","site_admin":false},"repo":{"id":67340575,"name":"iroha","full_name":"hyperledger/iroha","owner":{"login":"hyperledger","id":7657900,"avatar_url":"https://avatars2.githubusercontent.com/u/7657900?v=4","gravatar_id":"","url":"https://api.github.com/users/hyperledger","html_url":"https://github.com/hyperledger","followers_url":"https://api.github.com/users/hyperledger/followers","following_url":"https://api.github.com/users/hyperledger/following{/other_user}","gists_url":"https://api.github.com/users/hyperledger/gists{/gist_id}","starred_url":"https://api.github.com/users/hyperledger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hyperledger/subscriptions","organizations_url":"https://api.github.com/users/hyperledger/orgs","repos_url":"https://api.github.com/users/hyperledger/repos","events_url":"https://api.github.com/users/hyperledger/events{/privacy}","received_events_url":"https://api.github.com/users/hyperledger/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/hyperledger/iroha","description":"Iroha - A simple, decentralized ledger","fork":false,"url":"https://api.github.com/repos/hyperledger/iroha","forks_url":"https://api.github.com/repos/hyperledger/iroha/forks","keys_url":"https://api.github.com/repos/hyperledger/iroha/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hyperledger/iroha/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hyperledger/iroha/teams","hooks_url":"https://api.github.com/repos/hyperledger/iroha/hooks","issue_events_url":"https://api.github.com/repos/hyperledger/iroha/issues/events{/number}","events_url":"https://api.github.com/repos/hyperledger/iroha/events","assignees_url":"https://api.github.com/repos/hyperledger/iroha/assignees{/user}","branches_url":"https://api.github.com/repos/hyperledger/iroha/branches{/branch}","tags_url":"https://api.github.com/repos/hyperledger/iroha/tags","blobs_url":"https://api.github.com/repos/hyperledger/iroha/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hyperledger/iroha/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hyperledger/iroha/git/refs{/sha}","trees_url":"https://api.github.com/repos/hyperledger/iroha/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hyperledger/iroha/statuses/{sha}","languages_url":"https://api.github.com/repos/hyperledger/iroha/languages","stargazers_url":"https://api.github.com/repos/hyperledger/iroha/stargazers","contributors_url":"https://api.github.com/repos/hyperledger/iroha/contributors","subscribers_url":"https://api.github.com/repos/hyperledger/iroha/subscribers","subscription_url":"https://api.github.com/repos/hyperledger/iroha/subscription","commits_url":"https://api.github.com/repos/hyperledger/iroha/commits{/sha}","git_commits_url":"https://api.github.com/repos/hyperledger/iroha/git/commits{/sha}","comments_url":"https://api.github.com/repos/hyperledger/iroha/comments{/number}","issue_comment_url":"https://api.github.com/repos/hyperledger/iroha/issues/comments{/number}","contents_url":"https://api.github.com/repos/hyperledger/iroha/contents/{+path}","compare_url":"https://api.github.com/repos/hyperledger/iroha/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hyperledger/iroha/merges","archive_url":"https://api.github.com/repos/hyperledger/iroha/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hyperledger/iroha/downloads","issues_url":"https://api.github.com/repos/hyperledger/iroha/issues{/number}","pulls_url":"https://api.github.com/repos/hyperledger/iroha/pulls{/number}","milestones_url":"https://api.github.com/repos/hyperledger/iroha/milestones{/number}","notifications_url":"https://api.github.com/repos/hyperledger/iroha/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hyperledger/iroha/labels{/name}","releases_url":"https://api.github.com/repos/hyperledger/iroha/releases{/id}","deployments_url":"https://api.github.com/repos/hyperledger/iroha/deployments","created_at":"2016-09-04T11:17:53Z","updated_at":"2018-02-01T03:22:50Z","pushed_at":"2018-02-01T08:15:12Z","git_url":"git://github.com/hyperledger/iroha.git","ssh_url":"git@github.com:hyperledger/iroha.git","clone_url":"https://github.com/hyperledger/iroha.git","svn_url":"https://github.com/hyperledger/iroha","homepage":"http://iroha.tech","size":44101,"stargazers_count":553,"watchers_count":553,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":187,"mirror_url":null,"archived":false,"open_issues_count":45,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":187,"open_issues":45,"watchers":553,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/hyperledger/iroha/pulls/929"},"html":{"href":"https://github.com/hyperledger/iroha/pull/929"},"issue":{"href":"https://api.github.com/repos/hyperledger/iroha/issues/929"},"comments":{"href":"https://api.github.com/repos/hyperledger/iroha/issues/929/comments"},"review_comments":{"href":"https://api.github.com/repos/hyperledger/iroha/pulls/929/comments"},"review_comment":{"href":"https://api.github.com/repos/hyperledger/iroha/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/hyperledger/iroha/pulls/929/commits"},"statuses":{"href":"https://api.github.com/repos/hyperledger/iroha/statuses/297f222cbfb617a166392a72873c3c0e5dc04efa"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"kamilsa"}}