github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/stellar/stellarsvc/rooter_test.go (about)

     1  // Stuff copied from engine tests
     2  package stellarsvc
     3  
     4  import (
     5  	"context"
     6  	"fmt"
     7  
     8  	"github.com/keybase/client/go/engine"
     9  	"github.com/keybase/client/go/kbtest"
    10  	"github.com/keybase/client/go/libkb"
    11  	"github.com/keybase/client/go/protocol/keybase1"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  func proveRooter(tc *TestContext) (postID string, sigID keybase1.SigID) {
    16  	ui, sigID, err := proveRooterWithSecretUI(tc.G, tc.Fu, &libkb.TestSecretUI{}, libkb.GetDefaultSigVersion(tc.G))
    17  	require.NoError(tc.T, err)
    18  	return ui.postID, sigID
    19  }
    20  
    21  func proveRooterWithSecretUI(g *libkb.GlobalContext, fu *kbtest.FakeUser, secretUI libkb.SecretUI, sigVersion libkb.SigVersion) (*ProveUIMock, keybase1.SigID, error) {
    22  	sv := keybase1.SigVersion(sigVersion)
    23  	arg := keybase1.StartProofArg{
    24  		Service:      "rooter",
    25  		Username:     fu.Username,
    26  		Force:        false,
    27  		PromptPosted: true,
    28  		SigVersion:   &sv,
    29  	}
    30  
    31  	eng := engine.NewProve(g, &arg)
    32  
    33  	hook := func(arg keybase1.OkToCheckArg) (bool, string, error) {
    34  		sigID := eng.SigID()
    35  		if sigID.IsNil() {
    36  			return false, "", fmt.Errorf("empty sigID; can't make a post")
    37  		}
    38  		apiArg := libkb.APIArg{
    39  			Endpoint:    "rooter",
    40  			SessionType: libkb.APISessionTypeREQUIRED,
    41  			Args: libkb.HTTPArgs{
    42  				"post": libkb.S{Val: sigID.ToMediumID()},
    43  			},
    44  		}
    45  		mctx := libkb.NewMetaContextTODO(g)
    46  		res, err := g.API.Post(mctx, apiArg)
    47  		ok := err == nil
    48  		var postID string
    49  		if ok {
    50  			pid, err := res.Body.AtKey("post_id").GetString()
    51  			if err == nil {
    52  				postID = pid
    53  			}
    54  		}
    55  		return ok, postID, err
    56  	}
    57  
    58  	proveUI := &ProveUIMock{hook: hook}
    59  
    60  	uis := libkb.UIs{
    61  		LogUI:    g.UI.GetLogUI(),
    62  		SecretUI: secretUI,
    63  		ProveUI:  proveUI,
    64  	}
    65  	m := libkb.NewMetaContextTODO(g).WithUIs(uis)
    66  	err := engine.RunEngine2(m, eng)
    67  	return proveUI, eng.SigID(), err
    68  }
    69  
    70  type ProveUIMock struct {
    71  	username, recheck, overwrite, warning, checked bool
    72  	postID                                         string
    73  	hook                                           func(arg keybase1.OkToCheckArg) (bool, string, error)
    74  }
    75  
    76  func (p *ProveUIMock) PromptOverwrite(_ context.Context, arg keybase1.PromptOverwriteArg) (bool, error) {
    77  	p.overwrite = true
    78  	return true, nil
    79  }
    80  
    81  func (p *ProveUIMock) PromptUsername(_ context.Context, arg keybase1.PromptUsernameArg) (string, error) {
    82  	p.username = true
    83  	return "", nil
    84  }
    85  
    86  func (p *ProveUIMock) OutputPrechecks(_ context.Context, arg keybase1.OutputPrechecksArg) error {
    87  	return nil
    88  }
    89  
    90  func (p *ProveUIMock) PreProofWarning(_ context.Context, arg keybase1.PreProofWarningArg) (bool, error) {
    91  	p.warning = true
    92  	return true, nil
    93  }
    94  
    95  func (p *ProveUIMock) OutputInstructions(_ context.Context, arg keybase1.OutputInstructionsArg) error {
    96  	return nil
    97  }
    98  
    99  func (p *ProveUIMock) OkToCheck(_ context.Context, arg keybase1.OkToCheckArg) (bool, error) {
   100  	if !p.checked {
   101  		p.checked = true
   102  		ok, postID, err := p.hook(arg)
   103  		p.postID = postID
   104  		return ok, err
   105  	}
   106  	return false, fmt.Errorf("Check should have worked the first time!")
   107  }
   108  
   109  func (p *ProveUIMock) Checking(_ context.Context, arg keybase1.CheckingArg) error {
   110  	p.checked = true
   111  	return nil
   112  }
   113  
   114  func (p *ProveUIMock) ContinueChecking(_ context.Context, _ int) (bool, error) {
   115  	return true, nil
   116  }
   117  
   118  func (p *ProveUIMock) DisplayRecheckWarning(_ context.Context, arg keybase1.DisplayRecheckWarningArg) error {
   119  	p.recheck = true
   120  	return nil
   121  }