Yeah, here:
ATestWeapon* Wp = Cast<ATestWeapon>(Weapon);
Wp->SetActorLocation(ADSOffset);
But when you spawn Wp, you never assign the spawned actor to the weapon variable:
ATestWeapon* Wp = World->SpawnActor<ATestWeapon>(Weapon, GunOffset, GunRotation);
Wp->AttachRootComponentTo(FirstPersonCameraComponent);
See how you never do anything along the lines of Weapon = Wp, or something?