►
Description
In this session we finish rewriting an old Vue spec to use VTU and follow testing best practices.
Part 1: https://youtu.be/B_-NBSdFn6s
MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/91603
A
Hey
everybody,
let's
pick
up
where
we
left
off,
but
before
I
do
that
I'm
realizing
my
laptop
isn't
plugged
in
just
a
second
here
we
go.
A
All
right
we
are
charging,
so
let
me
share
my
screen.
A
A
We
were
using
this
helper,
which
just
actually
manually
mounts
The
View
component
completely,
and
we
don't
get
to
have
cool
features
like
shallow
mounting
or
not
being
able
to
assert
props
and
all
sorts
of
things
like
that,
but
now
we're
using
our
view
test,
utils
helper
we're
also
going
to
try
to
improve
some
of
the
testing
practices
happening
here
where
we're
directly
mutating
the
component
state
and
directly
calling
methods.
A
Although
some
of
this
stuff,
we
might
not
be
able
to
address
so,
let's
check
out
this
branch
and
let's
push
it
forward,
so
copy
the
branch
by
pressing
B
I'm
at
the
get
lab
project
that
I
have
checked
out.
Let
me
go
ahead
and
open
up
vs
code
here
here.
We
go,
never
mind
that
stuff,
let's
see
where
I'm
at
all
right.
Let
me
fetch
the
gitlab
workflow
extension.
What's
that
I'll
install
that
later.
A
B
A
A
A
So
without
doing
anything
to
this
component,
so
one
side
note
one
of
the
downsides
of
this
component:
is
it's
not
totally
stateful,
meaning
that
it
looks
like
we
expect
it
to
initialize
its
state
by
having
this
public
method
called,
which
methods
aren't
really
public,
but
they
kind
of
are
in
view
land,
so
that's
just
where
we're
at
so
we
have
it
to
do
to
kind
of
change
this
to
maybe
we
can
be
more
stateful
on
this,
but
right
now
it
should
be
fine.
A
We're
not
what's
not
in
scope,
is
really
changing
this
underlying
component
too
much
so
here
in
this
test
context
we're
just
mounting
the
component
we're
not
calling
that
open
method
or
anything
like
that,
and
so,
let's
just
see
what
we
get
initially
so
initially
we,
the
modal,
should
exist
whenever
I
test
weather
components
are
present
kind
of
like
to
double
check
their
props,
so,
like
just
dot
exists,
isn't
the
strongest
assertion.
A
So,
let's
see
if
we
can
check
the
props
and
see
what
that
would
look
like,
maybe
they
already
when
they
were
working
on
this,
maybe
there's
a
reason
why
they
didn't
do
that.
But
let's
see.
A
A
A
Yeah
we
have
a
title
and
stuff
that
we
all
initialize
at
so
I
I
think
we
can
I
think
I'm
going
to
start
on
some
of
this
stuff,
but
I'd
like
to
do
that.
A
A
Yeah,
this
is
kind
of
just
a
hardcore
coded
thing.
I
said:
I
didn't
want
to
change
this
component,
I
kind
of
really
want
to,
because
this
doesn't
need
to
be
a
computed
thing.
This
can
just
be
a
static
thing,
but
that's
fine
I
won't
worry
about
it,
but
let
me
pull
in
the
internationalization.
Oh
here,
it
is
oh
sorry
over
there
all
right,
we'll
just
leave
it
at
that.
Then
all
right
action
cancel
has
attributes.
A
Oh
roller,
what
is
your
deal
confirm?
X,
create
file
great
all
right
action
secondary
is
null.
We
can
go
ahead
and
well
that
we're
not
setting
that.
So
maybe
we
shouldn't
assert
that.
Maybe
we
should,
though,
now
let's
go
and
do
that
we
don't
have
any
I,
don't
worry
about
the
label.
The
dismiss
label.
A
We
could
insert
on
the
modal
ID
that
might
be
wise,
I'll
go
ahead
and
add
the
alarm
yeah
I.
Don't
even
have
this
I
will
add
the
model
ID
to
there's
no
harm
in
having
stricter
assertions.
Idol
has
the
create
new
file.
Title
title
tag:
we're
not
necessarily
setting
cool,
so
I'm
only
doing
a
subset
of
these,
because
some
of
these
I
mean
we
could.
A
We
could
include
all
of
it,
but
if
I
did
two
equal
and
then
we
like
added
a
new
prop
to
GL
model,
this
test
is
going
to
fail
so
I'm,
actually
just
going
to
do
it
to
match
object.
Oops
I
have
Extra
Spaces
here,
which
I
did
not
need
to
have
all
right.
Let's
see
if
that
works,
so
I'm
going
to
do
fit
the
focus
this
test
and
just
run
it
volar
I'm,
going
to
uninstall
you.
You
have
been
disappointing
cool
awesome.
A
We
are
rendering
the
modal
so,
along
with
that,
we
might
want
to
show
that
we're
rendering.
Also
this
we
have
a
test
previously
that
we're
rendering
this
form
label.
We
could
test
that
we're
rendering
this
input
are
we
creating.
A
A
And
I
think
that's
fine
to
so
what
I'm
thinking
in
my
head
is
I,
don't
know,
do
I
want
to
add
assertions
for
like
these
inputs
and
stuff
without
calling
that
open
and
I
think
I'm
going
to
just
to
keep
it
simple.
Let's
just
assert
all
the
interesting
stuff
that
we're
rendering
here
yeah,
let's
go
and
do
that
all
right,
it
renders
label
expect
wrapper.
That's
fine
label,
dot
text
to
be
name.
A
A
That's
a
good
idea.
You
can
start
a
watcher,
did
not
find
it
actually,
and
that's
probably
because
this
modal
is
a
stub
so
so
like.
If
I
do
we'll
go
ahead
and
do
fit
here.
If
I
did
console
fine
GL
modal.
A
A
A
There's
a
lot
all
right,
I
thought
that
we
would
have
S
anyways,
I,
I
kind
of
know
what
I
need
to
fix
here.
Oh,
we
are
doing
a
full
amounts
here.
Oh
that's
why
it's
not
showing
up
okay,
yes,
I
thought
we
were
doing
a
shallow
mouth.
We
probably
changed
it
to
a
full
mount
for
this
modal
thing
to
work,
but
that's
not
necessarily
like
my
favorite
way
of
handling
this.
It
was
it's
a
totally
fine
way,
but
you
see
how
I'm
already
confused
like.
Why
isn't
this
modal?
Why
can't
I
see
this
thing?
A
We
have
a
cool
stub
that
we
can
use
to
replace
modal,
so
we
can
do
shallow
mounts
but
replace
the
GL
modal
with
a
test
version
of
it.
That
makes
testing
models
a
little
easier
so
that
these
things
can
actually
be
visible.
Let
me
see
if
I
can
find
that
stub
modal.
A
A
A
So
we
can
create
this
and
not
actually
show
the
modal,
but
we
can
assert
that
all
of
these
things
are
here
so
that
like
showing
of
the
modal,
is
something
the
modal
takes
care
of
on
its
own.
We
don't
necessarily
need
to
test
that
here
in
this
component,
so
I
like
using
a
stub
component
thing,
the
stub
component
is
overwriting
the
template
so
that
all
all
the
props
and
other
things
will
be
passed
over,
but
the
slot
here
will
always
be
rendered
and
that's
what
we
want.
So,
let's
do
that.
A
A
All
right
so
here,
I
changed
it
to
where
I
was
I
was
surprised
that
nothing
was
actually
being
rendered,
but
now
it
will
show
up,
which
is
why
I
wanted?
Yes?
Yes,
yes,
yes,
yes,
lovely,
lovely,
lovely,
okay,
so
now
I
get
my
label
and
all
the
other
stuff.
Even
the
model's
not
shown
that's
okay,
because
this
is
a
unit
test.
I
want
to
test.
A
I'll
have
to
test
all
the
internals
of
modal
that
has
its
own
tests.
So
let's
just
assert
that
we're
rendering
the
label
great
and
then
let's
assert
that
we're
rendering
the
input
I'm
not
worried
about
testing
these,
like
bootstrappy
wrapping,
bootstrappy
wrapper
elements.
That's
not
needed,
I'm,
just
interested
in
the
interesting
elements
it
renders
the
input.
A
So
let's
do
wrapper
dot,
find
input,
and
that's
probably
a
good
thing
for
me
to
add
to
our
little
helper
thing
here.
Find
input.
A
Okay,
oh,
we
have
a
test
ID
for
it,
so
I
can
already
do
find
by
test
ID
file,
name
field
cool,
all
right,
so
find
input,
dot,
attributes
Maybe
to
equal
all
right
fit
that
boom.
So
we
get
those
classes,
that's
fine.
We
have
the
placeholder
and
the
type
okay
and
I
don't
know
if
we
have
the
value
so
I'll
go
ahead
and
let's
just
check
out
the
let's
just
say
the
type
is
text
and
the
placeholder
is
where's
that
place
where
we
come
from.
A
A
Foreign,
because
I'm
not
doing
all
of
them,
I'm
just
going
to
need
to
match
object,
cool
great,
so
we're
rendering
the
input
correctly,
but
I
want
to
also
search
the
value
of
the
imported,
so
I
think
I
can
do
this.
That's
not
going
to
be
right.
I
know
it's
not
right.
A
I
know,
what's
up
right,
how
do
I
do
that
in
it's
not.
Is
it
the
it's?
Not
the
props.
Is
it
no?
It
can't
be
because
this
is
just
an
input.
Let
me
look
up
you
test.
Utils.
A
A
And
updates
the
V
model
bound
data
set
value,
they're,
getting
the
actual
underlying
element
and
doing
a
Dodge
value.
That's
fine,
I'm
gonna
die
value.
It's
p
should
be
initialize,
something
empty.
Yes,
yes,
yes,
okay,
so
we're
rendering
the
input,
that's
great
news,
and
so
if
we
are
creating
a
new
file,
we
are
also
doing
this
thing
for
each
one
of
these
template
types.
We
create
all
these
buttons.
So
let's
go
to.
A
How
do
we
want
to
do
this
so
I
have
what
I
like
to
do:
yeah
yeah,
yeah
yeah,
so
so
yeah.
Let's
check
that
out
so
I
like
to
deal
with
something
where
I'm
finding
by
all
of
these
buttons
and
I
create
this
like
object
for
me
to
make
an
assertion
on
so
I'm
gonna
go
create
a
helper
called,
find.
A
A
A
I
can't
think
about
I'm
just
going
to
call
it
model,
so
it's
like
I'm
finding
like
a
model
from
the
template,
a
model
for
me
to
assert
against
and
I'll
show
you
what
I
mean
by
that.
So
I'll
do
something
like
rapper.
That
is
there
any
like
test,
IDs
or
something
here
that
I
can
no
there's
not,
and
that's
fine,
there's
no
other
buttons
here.
So
I'll
do
find
all
components.
A
A
And
I'm
going
to
map
its
which
is
I'm
going
to
get
its
text.
S
and
I
will.
A
A
A
A
So,
where
are
these
coming
from?
I
can
hard
code
these
values,
but
maybe
there's
like
a
constant
I
can
just
use
instead.
Oh
that's
a
getter
from
the
store.
That's.
A
Okay,
the
way
I'm
gonna
do
this
yeah
I'm
gonna.
Do
this
by
doing
something
like
const
actual
equals,
find
template
buttons
model.
A
B
A
A
A
A
Yeah
I
haven't
done
that
in
a
long
time-
cool-
that's
great,
so
we're
rendering
all
the
buttons.
So
that's
kind
of
our
starting
point
for
this.
The
some
things
that
we
we'll
test
we'll
need
to
test
so
now
we're
just
testing
how
we
render
it
but
I'm
noticing
all
these
events
we're
not
really
handling
so
we'll
definitely
want
to
do
test
and.
A
Modal
and
that's
primary
password
model
and
that's
cancel
past
when
template
type
button
is
clicked.
A
A
Entry,
that's
interesting,
okay,
if
we're
renaming,
but
we're
on.
Oh
that's
interesting!
A
A
We
can
open
this
thing
with
a
modal
type
of
whether
it
being
a
tree
or
blob
or
rename,
apparently
I-
guess
that
comes
from
constants
here.
Let's
look
up
ID
constants
model
yep
tree
blob
rename,
and
if
it's
a
read
name,
it
looks
like
we
make
decisions
based
on
the
type
that
was
actually
the
path
that
we're
passing
and
the
type
that
actually
exists
and
our
state
of
entries,
and
that
is
how
we
make
a
number
of
different
decisions,
and
so
some
of
the
conditions
here
button
title.
A
A
And
then
submitting
to
is
going
to
have
different
Behavior
looks
like
whether
we're
renaming
or
not.
A
A
So,
let's,
let's
deal
with
renaming
as
its
own,
a
Zone
describe
entity
I
like
let's
create
this
parameterized
test
is
nice,
but
let's
go
ahead
and
move
it
outside
of
the
default
context
and
into
its
own
thing.
A
A
That's
fine.
Do
we
want
to
do
that,
though?
Oh
we
might
want
to
yeah,
let's
go
and
add
that
as
something
that
will
pass
into
there.
This
is
shows
file
templates.
A
A
If
you
want
to
verify
that
we
triggered
shelling
in
a
modal.
If
you
want
to
verify
that
and
entry
name,
is
that
just
bound
to
yeah,
then,
when
we
actually
submit.
A
A
A
Has,
and
what
we'll
call
here
is
yeah
shows.
A
A
A
A
A
A
A
Because
we've
already
asserting
what
those
templates
will
be
and
I'm
kind
of
wanting
to
reuse
this
thing
anyways,
so
here's
just
an
idea:
I,
don't
know
if
we
like
this,
but
here's
an
idea
we
can
do
if
shows
file
templates
here
it
I.
Don't
think
that's
a
good
idea!
No!
No!
No!
It
won't
do
that.
I!
Guess
it's
interesting
when
you
parameterize
things.
A
Yeah
I'm
not
a
huge
fan
of
this,
but
we'll
see.
Oh
wait.
Wait!
Wait!
Yes!
Yes!
Yes!
Yes!
Yes!
Oh
yes!
Yes!
What
we'll
do
is
this?
As
filed
templates
equals?
Oh,
yes,
actual
equals.
Fine
template
book
dot
length
is
greater
than
zero,
so
I
expect
actual
so
B.
Yes!
Yes!
Yes!
Yes,
yes,
all
right
great!
So
now
we
want
to
make
sure
we
triggered.
A
Oh
I
would
like
to
assert
inputs
placeholder.
Yes,.
A
A
A
Yeah,
let's
go
ahead
and
I,
don't
know
what
guess
we
make
it
longer?
That's
fine!
Well,
I
was
thinking
we
can.
Maybe
this
table
structure
isn't
the
best
for
it,
but
I
won't
worry
about
it
right
now,
so
we
have
input.
A
Value
should
be
input,
value,
we'll
go
ahead
and
put
this
scope
too.
I
would
expect
this
to
be
input
value,
but
working
yes,
but
it
is
failing
because
when
we
set
it
to
here,
the
input
value
starts
out
as
to
the
bar
slash.
A
A
Obsolete
because
we're
already
testing
it
so
do
I
want
to
just
get
rid
of
it.
A
Okie
dokie
foreign,
so
looking
at
what
open
does
we're
setting
all
that
stuff
great,
but
we
wanted
to
double
check
that
we're
actually
triggering
focus
on
our
input
and
we
actually
trigger
showing
the
modal.
A
A
Gosh
I
wish
there
was
a
way
to
like,
maybe
no
see
it's
not
gonna
update
its
prop.
It's
just
gonna
update
its
internal
state.
So
the
fact
that
we're
actually
calling
this
method
I
think
the
best
way
to
assert
that
we
actually
opened.
It
is
to
add
a
spy
on
that
public.
That
method
that
we're
calling
here
I
wish.
We
could
insert
like
a
prop
that
it's
actually
open
or
not,
but
we
don't
seem
to
be
working
that
way.
I
don't
know
if
it's
feasible
for
us
to
change
it
right
now.
A
A
Cool,
so
this
is
working,
but
you
know
anytime,
you're,
actually
calling
something
under
Condition,
it's
nice
to
assert
that
it
wasn't
called
regularly.
A
A
A
A
All
right
so
we're
asserting
that
we're
showing
the
model
that's
great.
Now,
let's
trigger
focus
on
elements.
A
A
I
think
I
just
discovered
a
bug,
I
think
it's
this
behavior,
let's
see
if
we
can
open
up.
Let
me
open
up
a
smaller
project.
Let's
check
this
out
boom,
so
I
think.
If
I
do
rename,
we
still
we
use
this
static.
No,
let's
just
go
here.
That's
fine!
A
Yeah
we'll
go
here.
So
if
I
do
rename
see
how
that
gets
highlighted,
that's
cool.
A
A
If
I
just
do
new,
that
kind
of
stuff
doesn't
show
up,
we
already
said
we're
going
to
handle
renaming
in
a
different
context.
So
let's
handle
that
differently,
but
we
are
just
doing
Focus,
so,
let's
say
hey,
we
show
it
and
then
hey.
Let's
say
we
focus
on
input.
A
A
A
Primary
cancel
and
a
template
type
button
is
clicked.
A
A
A
We
did
the
next
tick
thing
over
here
yeah.
We
did
like
that
last
time,
all
right
next
tick.
So
when
we're
submitting
it,
we
want
it
to
oh,
but
this
is
after
opening
it.
We're
then
going
to
change
the
so
we'll
open
it.
We'll
change
the
input,
value
and
then
submit
it
and
then
see
what
happens
so
we'll
change
the
input
volume.
A
Let's
go
wait
after
doing
that
and
we'll
change
the
input,
value
and
then
submit
it,
so
we'll
find
the
input
set
value
to
the
name
and
then
we'll
trigger
submitting
it,
which
the
way
we
do,
that
is
we're
going
to
emit
primary.
B
A
So
after
we
do
that
we'll
trigger,
submit
and
we'll
see
what
happens
so
we're
gonna
expect
when
we
trigger
submit
I'm
going
to
expect
this
action
of
create
temp
entry
to
be
called
and
so
I
think
already.
When
we're
setting
up
our
store,
we
are
saying
to
we're:
creating
a
dispatch
yeah,
so
I
can
just
spy
I
can
okay,
it
triggers
create
temp
entry
action.
A
So,
looking
at
the
previous
tests,
I
know
that
that
means
that
it's
like
getting
rid
of
spaces
within
the
paths
so
I'm
going
to
say
expect
a
name
is
something
different
so
that
we
can
distinguish
between
what
name
is
going
to
be
in
our
expectation
and
otherwise
so
we'll
have
it
like.
So
it's
going
to
be
like
this.
B
A
A
A
Yeah,
that's
that's
old
stuff,
that's
again
or
that's
coming
up,
so
name
is
actually
going
to
be
expected.
Name
I
need
to
pull
that
into
context.
A
A
I
guess
path
is
like
what
it
was.
Originally
we
opened
it
under
I.
Guess,
that's
really
only
relevant
for
like
a
rename
I
guess,
that's
it.
Okay,
so
we'll
say
we'll
just
do
one.
A
A
Before
each,
this
will
probably
need
to
be
a
sync
and
we'll
do
very
much
some
of
the
same
stuff,
but
this
time
we'll
just
hard
code.
This
is
going
to
be
a
tree,
and
this
is
Fubar
an
open,
S
tree
with
a
path
it.
A
A
A
A
A
A
A
A
A
A
Okay
did
I
already
get
rid
of
those
Studios
I
had
added.
Oh
I
did
oh
here
they
are
okay.
We
did
those
describe
when
creating
my
separate
the
hype.
A
A
All
right,
let's
go
ahead
and
say
we
open
this
so
before
each.
A
Component,
oh,
wait,
open,
we'll
call
open;
it
just
has
to
be
a
blob
type
and
we'll
call
this.
A
All
right
open
blob,
so
we
will
await
I
guess
this
is
this.
Is.
A
So
we
can
go
ahead
and
do
our
action
here.
We've
opened
it
up.
We
waited
for
things.
Let's
I've
been
doing
this.
Oh
wait,
never
mind
find
and
put
set
value
to
be
Sunder
slash
through
GIS,
but
then
we
are
actually
going
to.
B
A
Fine
template
buttons
at
one
pm
and
that
all
right
can
we
trigger
click,
the
yeah
yeah,
this
GL
point,
so
we
can
triggers
no,
it
doesn't
have
to
be
vmmed.
Okay,
VM
commit
click,
okay,.
A
A
Oh
hard
coded
but
I'll
add
a
comment
about
it.
A
It's
not
seemed
right
to
you,
but
that's
don't
know
if
there's
any
events
and
stuff
that
we
can
listen
to
other
than
this,
so
I'll
just
assert
that
I
guess
we
could
listen
to
certain
events,
just
like
assert
that
it
was,
but
it's
fine,
fine,
DL
model
and
toggle
to
have.
A
We're
gonna
make
sure
these
are
not
called,
does
not
bring
a
model,
it
does
not
dispatch.
A
A
A
A
Check
create
Flash,
that's
that's
all
we
got
left,
I,
think
I,
don't
I
think
this
is
an
old
thing,
so
I'm
gonna
delete
this.
A
A
Thinking
about
this,
let
me
make
sure
I,
don't
even
know
my
mic
is
still
on
all
right.
One
of
the
one
of
the
reasons
is
testing
has
been
a
little
slightly.
Painful
is
because
this
component
is
a
little
slightly
painful
and
has
fairly
interesting.
A
Interesting
is
not
the
right
word,
but
undesirable
State
patterns
so
like
this
modal
type
for
one,
just
even
having
like
a
type
value
where
we're
doing
conditions
on
is
a
little
interesting,
but
things
get
really
weird
when
we're
doing
this
rename
thing
and
now,
all
of
a
sudden,
we
have
to
pull
from
our
actual
existing
entry
to
know
whether
we
were
doing
a
directory
or
a
blob
rename,
and
so
it's
like
what
is
this?
A
What
is
the
truth
of
is
modal
type,
where
we
pull
whether
we're
a
blob
or
a
tree,
or
is
the
original
state?
How
come
it's
so
complicated
and
spread
across
multiple
places,
and
so
that's
kind
of
what's
Happening
here
too,
when
we're
doing
a
rename
and
yeah.
This
is
interesting
like
this.
This
file
check
where
we
create
the
Flash.
A
A
Did
that
happen
with
the
is
that
happening,
because
there
was
a
rename
or
did
that
happen?
I
think
that
happened,
because
crepe
temp
entry
handles
that
kind
of
flash
thing
as
well.
So
there's
a
very
messy
responsibility:
it's
not
clear
when
who
owns
what
when
we're
doing
things,
and
so
we
do
it
multiple
times
in
multiple
different
ways:
that's
difficult
to
maintain
all
right!
That's!
Okay!
A
A
We're
just
focusing
on
this
component
now
we're
in
rename
land.
Let's
do
the
unhappy
path
later.
So,
let's
try
to
trigger
renaming
a
blob
and
renaming
a
what
do
they
call
it
non-blob
a
tree
so.
A
A
This
isn't
I,
don't
think,
oh,
no,
that
that
should
be
false.
All
the
time.
That's
not
going
to
change
the
input
value.
A
Oh,
that's
interesting
if
I
do
a
rename,
no
matter
what
the
placeholders
is
always
going
to
be
a
directory
which
is
not
true,
some
weird
State
stuff,
all
right,
not
trying
to
fix
the
problems,
we're
just
trying
to
write
we're
trying
to
do
test
hardening
right
now.
So.
A
I'm,
not
gonna
worry
about
the
placeholder
thing
yet
we'll
just
search
the
input
value
when
we're
renaming.
A
Just
let's
see
so
we
got
the
modal
title,
that's
doing
stuff
with
renamed
or
you
can
just
do
a
searching
for
rename
the
button
labels
doing
stuff
when
we're
renaming,
and
then
these
methods
submit
form
the
stuff
when
we're
renaming
yeah.
So
it
should
be
it
just
button.
Title
modal
title
input,
value,
cool.
A
A
Okay,
but
it
does
look
like
we
have
that
little
selection
range
Bang
when
we're
focusing
the
end
part
to
focus
just
the
latter
part
of
the
input.
A
A
A
B
A
A
A
B
A
A
Properties
of
undefined
reading
type-
oh,
no,
it's
not
actually
even
running
it,
because
I
haven't
set
up
the
stage
thing:
okay,
yes,
because
there's
a
huge
assumption
that
the
state
is
set
up
as
expected,
these
computers
aren't
even
getting
calculated.
So
it's
just
freaking
out
and
blowing
up
that's
fine.
What
we
want
to
do
is
set
up
the
state
like
we
said
we're
going
to
state
no
store
state.
A
We
can
just
manually
write
to
the
state.
We
could
call
mutations
and
stuff,
but
we're
in
view
we
can.
We
can
update.
Reactive
objects
should
be
good,
so
we
are
going
to
update
this.
A
A
A
B
A
A
Oh
yeah
yeah,
so
I
can
just
create
a
nice
little
state
for
me
to
initialize
the
stainless.
Yes,
yes,
yes
and
I
won't
have
to
worry
about.
That's
it.
I'm
sold
all
right.
Well,
yes,
let's
just
initialize
that
over
here.
A
A
A
That's
fine
all
right.
Let's,
let's
just
use
this
method,
that's
fine,
we'll
call
it
parenter
parent
or
slash
so
Js.
Let's
just
leave
it
at
that.
Yeah
we'll
just
create
these
I
love.
It
we're
good
right.
Oh
yes,
you're
not
happy,
because
I
started
doing
other
things.
That's!
Okay!
A
Okay,
but
what's
great
is
what
we
can
do
here.
Is
here's
the
original
type,
here's
the
original
path,
I'll
just
use,
so
we
won't
hard
code
this
thing
because
it
is
going
to
be
different.
If
it's
a
tree
we
have
parenter,
should
I
do
a
nested
one,
maybe
I
shouldn't.
A
B
A
A
A
A
I,
will
we
won't
test
it
since
it
is
a
bug,
I,
don't
know
we'll
see
it
shows
the
model
we
are
focusing
on
the
input.
It
selects
name,
part
of
the
input.
A
A
Object,
the
range
of
text
get
selection
is
that
a
thing
I
can
actually
do
here.
Let's
see
console.log
because
we're
in
JS
Dom
land.
Let's
see,
let's
see
what
happens
here:
okay,
I,
get
this
cool
selection
thing.
That's
great!.
A
A
A
A
A
A
A
Find
in
and
then
put
that
element
selection
start
to
be
input.
Selection
start.
A
Selection
end
to
be
Bridge
path,
dot,
link,
I,
guess.
A
A
A
Oh
I
don't
have
the
right
thing,
we're
so
close,
we're
so
close
all
right.
Let's
keep
it
up.
A
A
So,
for
both
of
these
cases
we
will
I'm
going
to
do
the
happy
path,
we'll
rename
to
something
we
know
doesn't
exist
yet
all
right
so
I'll
have
it
described
here
when
renames.
A
For
each
pop
ped,
no,
no,
what
we're
going
to
do
is
we
will
find
the
input
set.
The
value
of
it
to
something
we
know
doesn't
exist
to
our.
A
Create
this
thing
up
here:
yeah
that
was
an
accident.
It
looks
like
I
really
did
I,
not
be
that
oh
cons,
new
name
equals
okay,
we'll
call
it
Babar
the
elephant
yeah
that
part
set
the
value
to
the
new
name
and
we
will
trigger
trigger,
submit.
A
All
right
it
is
submitted
successfully
trigger
to
submit
this
matches
would
expect
to
store
that
dispatch
to
have
been
called
with
rename
entry.
A
Parent
path
is
not
being
said,
so
it
looks
like
the
parent
path.
Is
that
I
guess?
Maybe
a
name
is
the
new
name.
A
Okey
dokey
all
right
bounce,
that's
good!
Okay!
So
let's
just
do
one
test
for
of
this
thing,
non-existing
all
right,
I
think
we're
good
there.
So
now
the
only
remaining
thing
is
when
the
file
already
exists
check
that
we
created
the
flash
all
right.
So
we
can
do
a
cool
little
thing
here,
where
we're
going
to
run
desktop
lock
on
flash,
let's
go
ahead
and
import.
It
still.
A
Which
I
guess
would
be
here,
let's
see
how
that
looks
sweets
all
right.
This
one
file
out
when
renaming
and
file
already
exists.
A
A
A
Oh
man,
yeah,
that's
a
that's.
Gnarly
actually
check
the
deleted
flag.
A
So
we've
opened
this
thing.
We
expect.
A
A
A
Need
to
wait
for
tick,
but
we
won't.
It
creates
Flash.
A
B
A
A
A
Two
have
been
called
with
rename
entry.
We
can
make
sure
we're
doing
all
the
path
stuff
correct.
You
know
that'd
be
great
if
I
move
this
deleted
one
into
Source.
Let's
do
that.
That's
a
great
idea!
I
do
Source
deleted.
Okay,.
A
A
So
let's
go
find
I
think
we
have
some
unnecessary
next
ticks.
Let's
see,
is
this
really
needed.
A
Not
sure
why
I'm
not
sure
why
it's
not
needed,
maybe
it's
probably
a
good
idea
to
leave
it,
but
let's
see
other
ones
that
are
definitely
not
needed.
I,
don't
think
this
one
will
be
needed.
A
A
Okay,
yeah,
that's
fine
cool,
let's
Commit
This,
all
right
finished
migrating
modal
spec
to
V2
pardon
the
coverage.