From 9c92e24b945cce3e330d96d79e463ea6b5b0605d Mon Sep 17 00:00:00 2001 From: wokashi Date: Fri, 21 May 2021 15:09:50 +0900 Subject: [PATCH] fix token to_payload bug --- .../active_record/reissuable_token.rb | 6 ++- spec/glueby/contract/token_spec.rb | 41 ++++++++++++++----- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/lib/glueby/contract/active_record/reissuable_token.rb b/lib/glueby/contract/active_record/reissuable_token.rb index 5282a614..eddfc2dd 100644 --- a/lib/glueby/contract/active_record/reissuable_token.rb +++ b/lib/glueby/contract/active_record/reissuable_token.rb @@ -7,8 +7,10 @@ class ReissuableToken < ::ActiveRecord::Base # @param [String] color_id # @return [Tapyrus::Script] def self.script_pubkey(color_id) - script_pubkey_hex = Glueby::Contract::AR::ReissuableToken.where(color_id: color_id).pluck(:script_pubkey).first - Tapyrus::Script.parse_from_payload(script_pubkey_hex.htb) + script_pubkey = Glueby::Contract::AR::ReissuableToken.where(color_id: color_id).pluck(:script_pubkey).first + if script_pubkey + Tapyrus::Script.parse_from_payload(script_pubkey.htb) + end end # Check if the color_id is already stored diff --git a/spec/glueby/contract/token_spec.rb b/spec/glueby/contract/token_spec.rb index 14c5eece..cffa9e37 100644 --- a/spec/glueby/contract/token_spec.rb +++ b/spec/glueby/contract/token_spec.rb @@ -69,13 +69,26 @@ let(:token_type) { Tapyrus::Color::TokenTypes::REISSUABLE } let(:amount) { 1_000 } - it { - expect {subject}.not_to raise_error - expect(subject[0].color_id.type).to eq Tapyrus::Color::TokenTypes::REISSUABLE - expect(subject[0].color_id.valid?).to be true - expect(subject[1][1].valid?).to be true - expect(Glueby::Contract::AR::ReissuableToken.count).to eq 1 - } + context 'reissuable token' do + it do + expect {subject}.not_to raise_error + expect(subject[0].color_id.type).to eq Tapyrus::Color::TokenTypes::REISSUABLE + expect(subject[0].color_id.valid?).to be true + expect(subject[1][1].valid?).to be true + expect(Glueby::Contract::AR::ReissuableToken.count).to eq 1 + end + end + + context 'non reissuable token' do + let(:token_type) { Tapyrus::Color::TokenTypes::NON_REISSUABLE } + it do + expect {subject}.not_to raise_error + expect(subject[0].color_id.type).to eq Tapyrus::Color::TokenTypes::NON_REISSUABLE + expect(subject[0].color_id.valid?).to be true + expect(subject[1][0].valid?).to be true + expect(Glueby::Contract::AR::ReissuableToken.count).to eq 0 + end + end context 'invalid amount' do let(:amount) { 0 } @@ -280,14 +293,20 @@ describe '#to_payload' do subject { token.to_payload.bth } - let(:token) { Glueby::Contract::Token.parse_from_payload('c150ad685ec8638543b2356cb1071cf834fb1c84f5fa3a71699c3ed7167dfcdbb376a914234113b860822e68f9715d1957af28b8f5117ee288ac'.htb) } + let!(:token) { Glueby::Contract::Token.parse_from_payload('c150ad685ec8638543b2356cb1071cf834fb1c84f5fa3a71699c3ed7167dfcdbb376a914234113b860822e68f9715d1957af28b8f5117ee288ac'.htb) } - it { is_expected.to eq 'c150ad685ec8638543b2356cb1071cf834fb1c84f5fa3a71699c3ed7167dfcdbb376a914234113b860822e68f9715d1957af28b8f5117ee288ac' } + it do + expect(subject).to eq 'c150ad685ec8638543b2356cb1071cf834fb1c84f5fa3a71699c3ed7167dfcdbb376a914234113b860822e68f9715d1957af28b8f5117ee288ac' + expect(Glueby::Contract::AR::ReissuableToken.count).to eq 1 + end context 'with no script pubkey' do - let(:token) { Glueby::Contract::Token.parse_from_payload('c150ad685ec8638543b2356cb1071cf834fb1c84f5fa3a71699c3ed7167dfcdbb3'.htb) } + let!(:token) { Glueby::Contract::Token.parse_from_payload('c150ad685ec8638543b2356cb1071cf834fb1c84f5fa3a71699c3ed7167dfcdbb3'.htb) } - it { is_expected.to eq 'c150ad685ec8638543b2356cb1071cf834fb1c84f5fa3a71699c3ed7167dfcdbb3' } + it do + expect(subject).to eq 'c150ad685ec8638543b2356cb1071cf834fb1c84f5fa3a71699c3ed7167dfcdbb3' + expect(Glueby::Contract::AR::ReissuableToken.count).to eq 0 + end end end end \ No newline at end of file